【SQL 學習】UNION 的排序方式!

楊奇龍發表於2010-11-07
(感謝dingjun123版主 為本文提供幫助)
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  --每個欄位都有排序的。                                                              
從上面的結果可以看出,顯然這不是根據第一欄位來排序的,再看下一個:
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
  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;

        ID VA TE                                                                
---------- -- --                                                                
         1 a1 b1                                                                
         1 a1 b2                                                                
         1 a1 b3                                                                
         1 a2 b1                                                                
         1 a2 b2                                                                
         1 a2 b3                                                                

已選擇6行。

基本上從這裡可以得出 union 執行的排序是全量排序,即對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
  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
 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;

        ID VA TE                                                                
---------- -- --                                                                
         1 a1 b1                                                                
         1 a1 b2                                                                
         1 a1 b3                                                                
         1 a2 b1                                                                
         1 a2 b2                                                                
         1 a2 b3                                                                
         2 a1 b2                                                                
         2 a2 b1                                                                
         2 a2 b2                                                                
         2 a2 b3                                                                
         3 a1 b2                                                                
         3 a2 b3          ---可以看出每個欄位有排序了!所以union是全量排序的~!                                                      
已選擇12行。
另外,minus,intersect的排序也是按所有列出現的順序全量排序!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-677667/,如需轉載,請註明出處,否則將追究法律責任。

相關文章