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

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

时间: 2024-11-02 17:49:12

【SQL 学习】UNION 的排序方式!的相关文章

【SQL 学习】minus 和intsect 的排序方式!

前面的文章说 minus  和intsect 的排序方式和union的排序方式是一样的,这里做一个实验验证一下: SQL> select id ,name ,text from t   2  minus   3  select id ,name ,text from t1; 未选定行 执行计划 ---------------------------------------------------------- Plan hash value: 452211453  ---------------

sql中UNION和UNION ALL比较与用法

union只是将两个结果联结起来一起显示,并不是联结两个表---- UNION 的语法如下: [SQL 语句 1] UNION [SQL 语句 2] 假设我们有以下的两个表格,   Store_Information 表格   store_name Sales Date  代码如下 复制代码 Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-0

MySQL的字符集和排序方式

字符串类型 MySQL的字符串分为两大类: 1)二进制字符串:即一串字节序列,对字节的解释不涉及字符集,因此它没有字符集和排序方式的概念 2)非二进制字符串:由字符构成的序列,字符集用来解释字符串的内容,排序方式决定字符的大小 字符集和排序方式 字符集和排序方式的关系是这样的:一个字符集可以有一个或多个排序方式,有一个默认的排序方式,我们可以通过 以下例子说明: mysql> show character set like '%gbk%'; +---------+----------------

Lucene5学习之自定义排序

         在Lucene5学习之排序-Sort中,我们已经学习了Sort的用法,已经了解了,Lucene搜索返回的命中结果默认是按照索引文档跟搜索关键字的相关度已经排序的,而相关度又是基于内部的打分机制和索引文档id,内部的打分机制则是根据Term的IDF-TF以及创建索引时Field的boost等决定的,默认是按照得分降序排序,得分相同再按docId升序排序.如果你觉得默认的排序方式满足不了你的需求,你可以设置SortField按照特定的域来排序,特定的域排序其实根据域的type类型去

关于排序方式和排序字段用参数传递的问题

问题描述 RT我想用参数来传递排序字段和排序方式,可老上提示语法错误,请高手帮忙!stringsql="select*fromStudent@SortWay";//stringsql="select*fromStudentOrderbyId@SortWay";SqlParameterparm=newSqlParameter("@SortWay",sortWay);老是出现语法错误,试了好多个了,难道sql语句里这样没有办法实现吗?看了好多存储过程

php多维数组的排序方式

例如我有一个多维数组$relationshop_list,其中有id,与sort两列,我希望数组按照id降序,sort降序的方式排列:  //排序 $array_field = array_column($relationshop_list,'sort'); //提出sort列 $array_id = array_column($relationshop_list,'id');      //提出id列 array_multisort($array_field,SORT_DESC,$array_

《SQL学习指南(第2版)(修订版)》——1.2 什么是SQL

1.2 什么是SQL SQL学习指南(第2版)(修订版)根据Codd对关系模型的定义,他提出一种名为DSL/Alpha的语言,用于操控关系表的数据.在Codd的论文发表后不久,IBM建立了一个研究小组来根据他的想法构建原型.该小组创建了一个DSL/Alpha的简化版本,即SQUARE,然后通过对SQUARE的改进,将之发展为SEQUEL语言,并最终命名为SQL. 今天SQL已经发展到了中年期(唉,就像作者一样),在这期间它经历了大量修改.在20世纪80年代中期,美国国家标准组织(ANSI)开始制

如果所有记录的date都相同,按date降序排列,得到的结果按什么排序方式?

问题描述 oracle中如果所有记录的date都相同,按date降序排列,得到的结果按什么排序方式?因为date都相同,总要有个date相同条件下的排序规则. 问题补充:我试了下,不行,没有按照rowid排ROWID ID NAME DATE_TIME--------------------------------------AAAHrhAABAAANHCAAA 4255 A 2011-3-1AAAHrhAABAAANHCAAB 4088 C 2011-3-1AAAHrhAABAAANHCAAC

phpmyadmin: linux学习篇-使用apt-get方式安装LAMP包括phpmyadmin

linux学习篇-使用apt-get方式安装LAMP包括phpmyadmin    对于想学linux的朋友来说,在虚拟机上装上linux系统是不二选择.至于哪种linux好用,萝卜白菜,各有所爱.我喜欢ubuntu,虚拟机上安装的是最新的ubuntu11.10    搭建LAMP环境有两种方式可以选择,一是用apt-get方式安装,这个适合初学者.有点是安装简单,不需要做什么配置就可以使用.缺点是自主性太差,安装目录啊啥的都是默认的,不方便自己管理,也不敢轻易的移动位置.二是用编译安装的方法.