天天看点

【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的排序也是按所有列出现的顺序全量排序!