美文网首页
UNION ALL、UNION与ORDER BY

UNION ALL、UNION与ORDER BY

作者: renyjenny | 来源:发表于2018-07-17 10:18 被阅读0次

一直以为UNION和UNION ALL就是把每个子查询的结果集合并起来,只是UNION要去掉重复项。直到今天发现了一个问题,UNION的子句中不能出现ORDER BY。

SELECT CUST_NUM FROM CUST_MST WHERE GENDR = 2 ORDER BY FLNM_NM
UNION
SELECT CUST_NUM FROM CUST_MST WHERE GENDR = 1 
-- output 
ORA-00933: SQLコマンドが正しく終了されていません。
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:
行15 列1でエラー

解决方法是,要把有ORDER BY的子句作为子查询的子句。

SELECT CUST_NUM FROM ( SELECT CUST_NUM FROM CUST_MST WHERE GENDR = 2 ORDER BY FLNM_NM)
UNION
SELECT CUST_NUM FROM CUST_MST WHERE GENDR = 1 

不过呢,就算解决这个问题,子查询的排序和UNION后的结果集排序也没有联系。因为UNION会对两个结果集进行并集操作,去除重复行,按照默认规则的排序。所以UNION只能在整个语句的最后使用ORDER BY才能达到想要的效果。
使用UNION ALL可以保持子结果集原本的顺序,按照子查询的先后顺序合并,靠前的子查询的结果集就排在前面。

SELECT
    *
FROM
    (
        SELECT CUST_NUM FROM CUST_MST WHERE GENDR = 2 ORDER BY FLNM_NM
    )
UNION ALL
SELECT
    *
FROM
    (
        SELECT CUST_NUM FROM CUST_MST WHERE GENDR = 1 ORDER BY BIRTYM
    )
UNION ALL

至于为什么不能在子句中加ORDER BY,我也不知道……

相关文章

  • UNION ALL、UNION与ORDER BY

    一直以为UNION和UNION ALL就是把每个子查询的结果集合并起来,只是UNION要去掉重复项。直到今天发现了...

  • 杂项

    1.UNION与UNION ALL合并UNION将返回两个查询的结果并去除其中的重复部分,UNION ALL与UN...

  • SQL union和union all操作符

    一、union和union all区别 union会去重,union all不会去重 二、SQL union操作符...

  • SQL面试题,快问快答!

    1. UNION ALL 与 UNION 的区别 UNION和UNION ALL关键字都是将两个结果集合并为一个。...

  • UNION 与 UNION ALL

    前言 学习到此内容是因为工作上的需求而接触到的,起初是对单表进行操作,需要对某一字段下的值进行分组统计次数并排序,...

  • Union与Union All

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字...

  • union与union all

    union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有...

  • SQL [UNION]和[UNION ALL]用法

    原文链接:SQL UNION和UNION ALL用法 一、概述 union和union all都用于合并多个查询,...

  • union比union all区别

    union去重并排序,union all直接返回合并的结果,不去重也不排序;union all比union性能好;

  • union 与 union all 区别

    union all (SELECTsc.IntelUserCode,sc.StartDate,sc.EndDate...

网友评论

      本文标题:UNION ALL、UNION与ORDER BY

      本文链接:https://www.haomeiwen.com/subject/awzfpftx.html