天天看點

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

(感謝<b>dingjun123</b>版主 為本文提供幫助)

union怎麼排序?

許多人肯定會說 根據第一字段來排序,呵呵,這個答案能得50分!考慮到如果select的第一個字段是重複時,會怎樣?看一個測試!

SQL&gt; 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的排序也是按所有列出現的順序全量排序!