(感謝<b>dingjun123</b>版主 為本文提供幫助)
union怎麼排序?
許多人肯定會說 根據第一字段來排序,呵呵,這個答案能得50分!考慮到如果select的第一個字段是重複時,會怎樣?看一個測試!
SQL> select 1 id ,'a1' val ,'b1' text from dual
2 union
3 select 1 ,'a1' ,'b3' from dual
4 union
5 select 1 ,'a1' ,'b2' from dual;
ID VA TE
---------- -- --
1 a1 b1
1 a1 b2
1 a1 b3 --每個字段都有排序的。
從上面的結果可以看出,顯然這不是根據第一字段來排序的,再看下一個:
5 select 1 ,'a1' ,'b2' from dual
6 union
7 select 1 ,'a2' ,'b3' from dual
8 union
9 select 1 ,'a2' ,'b1' from dual
10 union
11 select 1 ,'a2' ,'b2' from dual;
1 a1 b3
1 a2 b1
1 a2 b2
1 a2 b3
已選擇6行。
<b>基本上從這裡可以得出 union 執行的排序是全量排序,即對select 語句所包含的所有字段進行排序</b>!
再次驗證一下:
11 select 1 ,'a2' ,'b2' from dual
12 union
13 select 2 ,'a1' ,'b2' from dual
14 union
15 select 2 ,'a2' ,'b1' from dual
16 union
17 select 2 ,'a2' ,'b2' from dual
18 union
19 select 2 ,'a2' ,'b3' from dual
20 union
21 select 3 ,'a2' ,'b3' from dual
22 union
23 select 3 ,'a1' ,'b2' from dual;
2 a1 b2
2 a2 b1
2 a2 b2
2 a2 b3
3 a1 b2
3 a2 b3 -<b>--可以看出每個字段有排序了!是以union是全量排序的~!</b>
已選擇12行。
另外,minus,intersect的排序也是按所有列出現的順序全量排序!