ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【SQL 学习】UNION 的排序方式!

【SQL 学习】UNION 的排序方式!

原创 Linux操作系统 作者:杨奇龙 时间:2010-11-07 15:05:40 0 删除 编辑
(感谢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博客 ” ,链接:https://blog.itpub.net/22664653/viewspace-677667/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
MySQL DBA NoSQL DEVOPS

注册时间:2009-10-07

  • 博文量
    1026
  • 访问量
    8205955