`
爱像天空
  • 浏览: 197756 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

union组合结果集时的排序问题(order)

SQL 
阅读更多
如果能确定各查询结果不会有重复的项,最好就带上all,因为这样还是可以提高一些效率的。
近日,在一个项目中用到union组合两个select结果,调试sql时总是报错,所报错误也只是说在union附近有问题,因为sql中用到了group,我想也许是union不支持吧,由于时间紧,就先在程序中做了合并处理。但程序员对于代码的完美性要求总是不能放弃的,所以,常常会有如鲠在喉的感觉,不搞明白心里会不舒服。
仔细查看了MS的在线帮助,在有关UNION的描述中找到这样一段说明:
如果使用 UNION 运算符,那么各个 SELECT 语句不能包含它们自己的 ORDER BY 或 COMPUTE 子句。而只能在最后一个 SELECT 语句的后面使用一个 ORDER BY 或 COMPUTE 子句;该子句适用于最终的组合结果集。只能在各个 SELECT 语句中指定 GROUP BY 和 HAVING 子句。
在这段说明中并没有说union不能用于group,而是说在各个Select中不能包含order by,而在我的语句中恰恰就有这个,看来是我猜错了。试了一下把order去掉,果然不会报错了。也就是说,使用union的时候,各查询group是可以的,但不能order或compute。那如果说非要group,有没有办法呢?正常情况下只能在最后使用,而且是针对组合后的结果集进行排序的,而我刚才所说的group,就不能用于最终结果集,而只能用于每个查询。
这是正常的用法,有些人想在每个查询中先排序,然后再union,也有非正常的用法,类似:
select * from (select a from  order by a) union ...
另外,union后面还可以加上all,在默认情况下,union时会删除重复的项,如果加上all则不进行筛选,组合所有的结果。如果能确定各查询结果不会有重复的项,最好就带上all,因为这样还是可以提高一些效率的。
分享到:
评论

相关推荐

    mysql 常用语句+实例

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 ...

    T-SQL高级查询

    compute进行汇总前面是查询的结果,后面一条结果集就是汇总的信息。compute子句中可以添加多个汇总表达式,可以添加的信息如下: a、 可选by关键字。它是每一列计算指定的行聚合 b、 行聚合函数名称。包括sum、...

    超实用sql语句

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 ...

    经典全面的SQL语句大全

     UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1...

    SQL语法大全

    sql="select * from 数据表 where 字段名 like \'%字段值%\' order by 字段名 [desc]" sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 in (\'值...

    经典SQL语句大全

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 ...

    数据库操作语句大全(sql)

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 ...

    sql经典语句一部分

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 ...

    精通SQL 结构化查询语言详解

    9.4.3 ORDER BY子句排序UNION运算结果  9.4.4 对多表进行UNION运算  9.4.5 UNION JOIN 连接表  9.5 表连接的其他应用及注意问题  9.5.1 连接表进行聚合运算  9.5.2 多表连接的综合运用  9.5.3 多表连接...

    LINQ_to_SQL语法及实例大全

    3.多个可 能形状的单一结果集 65 4.多个结果集 70 5.带输出参数 79 LINQ to SQL语句(21)之用户定义函数 80 1.在Select中使用用户定义的标量函数 80 2.在Where从句中 使用用户定义的标量函数 81 3.使用用户定义的表值...

    21天学会SQL

    11.3.4 排序组合查询的结果 238 11.3.5 组合查询的实例 239 11.4 子查询 240 11.4.1 使用返回单值的子查询 240 11.4.2 子查询与聚合函数的配合使用 241 11.4.3 子查询的实例 241 11.5 在SSMS查询设计器中设计查询 ...

    2009达内SQL学习笔记

    多个字段组合时,只排除组合重复的。 DISTINCT必须使用列名,不能使用计算或者表达式。 所有的聚合函数都可以使用。如果指定列名,则DISTINCT只能用于COUNT(列名),DISTINCT不能用于COUNT(*)。 如:Select ...

    精通SQL--结构化查询语言详解

    9.4.3 order by子句排序union运算结果 180 9.4.4 对多表进行union运算 181 9.4.5 union join 连接表 183 9.5 表连接的其他应用及注意问题 183 9.5.1 连接表进行聚合运算 183 9.5.2 多表连接的综合运用 185 ...

    orcale常用命令

    SQL>select index_name,index_type,table_name from user_indexes order by table_name; 查看索引被索引的字段 SQL>select * from user_ind_columns where index_name=upper('&index_name'); 查看索引的大小 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 oracle的体系很庞大,要学习它,首先要了解oracle的框架。oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程...

    Excel VBA实用技巧大全 附书源码

    04052引用多个非连续单元格区域的集合(Union方法) 04053引用多个非连续单元格区域的集合(循环处理) 04054引用多个单元格区域的交叉区域 04055获取计算公式的所有引用单元格 04056获取计算公式中引用的其他工作表...

    Oracle_Database_11g完全参考手册.part3/3

    第13章 当一个查询依赖于另一个查询时 13.1 高级子查询 13.1.1 相关子查询 13.1.2 并列的逻辑测试 13.1.3 EXISTS及其相关子查询的使用 13.2 外部连接 13.2.1 Oracle9i以前版本中的外部连接的语法 13.2.2 现在的外部...

    Oracle_Database_11g完全参考手册.part2/3

    第13章 当一个查询依赖于另一个查询时 13.1 高级子查询 13.1.1 相关子查询 13.1.2 并列的逻辑测试 13.1.3 EXISTS及其相关子查询的使用 13.2 外部连接 13.2.1 Oracle9i以前版本中的外部连接的语法 13.2.2 现在的外部...

    Java数据库编程宝典2

    8.1 使用ORDER BY对查询结果进行排序 8.2 GROUP BY子句 8.3 聚合函数 8.4 使用HAVING子句筛选组 8.5 使用索引来提高SQL查询的性能 8.6 视图 8.7 小结 第9章 连接和组合查询 9.1 连接表 9.1.1 连接的类型...

Global site tag (gtag.js) - Google Analytics