oracle查询union用法

1.union和union all的区别

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

union(或称为联合)的作用是将多个结果合并在一起显示出来。

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

可以在最后一个结果集中指定Order by子句改变排序方式。

2.实例

 <select id="queryBy" resultType="com.wonders.qwsm.xinjian.vo.ChildCasualtyCauseVo">
        SELECT
        CASE WHEN bk.NLDW ='1' AND bk.SZNL=0  THEN '&lt;1岁'
        WHEN bk.NLDW ='1' AND bk.SZNL > 0  AND bk.SZNL  <![CDATA[ <= ]]> 3  THEN '1-3岁'
        WHEN bk.NLDW ='1' AND bk.SZNL >= 4  AND bk.SZNL  <![CDATA[ <= ]]>  6  THEN '4-6岁'
        WHEN bk.NLDW ='1' AND bk.SZNL >=7   AND bk.SZNL  <![CDATA[ <= ]]>  11 THEN '7-11岁'
        WHEN bk.NLDW ='1' AND bk.SZNL >=12  AND bk.SZNL <![CDATA[ <= ]]> 15 THEN '12-15岁'
        WHEN bk.NLDW ='1' AND bk.SZNL >=16  AND bk.SZNL  <![CDATA[ <= ]]> 18 THEN '16-18岁'
        ELSE NULL END nld,
        BK.GBSYDM,
        c.CCD,
        c.CCD_TNM,
        COUNT(1) count

        FROM T_Z_SWBK bk
        INNER JOIN TB_CCD c on c.CCD IN ('92','95','96','97','98','99','100','101','102','103','104')
        INNER JOIN TB_ICDCCD ic ON IC.CCD = c.CCD and ic.ICD = BK.GBSYDM
        WHERE BK.${key} >= TO_DATE('${startDate}', 'SYYYY-MM-DD') and BK.${key} <![CDATA[ <= ]]> TO_DATE('${endDate}', 'SYYYY-MM-DD')

        GROUP BY
        c.CCD,
        CASE WHEN bk.NLDW ='1' AND bk.SZNL=0  THEN '&lt;1岁'
        WHEN bk.NLDW ='1' AND bk.SZNL > 0  AND bk.SZNL  <![CDATA[ <= ]]>  3 THEN '1-3岁'
        WHEN bk.NLDW ='1' AND bk.SZNL >= 4  AND bk.SZNL  <![CDATA[ <= ]]> 6  THEN '4-6岁'
        WHEN bk.NLDW ='1' AND bk.SZNL >=7   AND bk.SZNL  <![CDATA[ <= ]]>  11 THEN '7-11岁'
        WHEN bk.NLDW ='1' AND bk.SZNL >=12  AND bk.SZNL  <![CDATA[ <= ]]>  15 THEN '12-15岁'
        WHEN bk.NLDW ='1' AND bk.SZNL >=16  AND bk.SZNL  <![CDATA[ <= ]]>  18 THEN '16-18岁'
        ELSE NULL END ,
        BK.GBSYDM,
        c.CCD_TNM

        UNION

        SELECT
        CASE
        WHEN bk.NLDW = '1' AND bk.SZNL >= 0 AND bk.SZNL <![CDATA[ <= ]]> 6 THEN '0-6岁小计'
        WHEN bk.NLDW = '1' AND bk.SZNL >= 7 AND bk.SZNL <![CDATA[ <= ]]> 18 THEN '7-18岁小计'
        ELSE NULL END nld,
        BK.GBSYDM,
        c.CCD,
        c.CCD_TNM,
        COUNT(1) count

        FROM T_Z_SWBK bk
        INNER JOIN TB_CCD c on c.CCD IN ('92','95','96','97','98','99','100','101','102','103','104')
        INNER JOIN TB_ICDCCD ic ON IC.CCD = c.CCD and ic.ICD = BK.GBSYDM
        WHERE BK.${key} >= TO_DATE('${startDate}', 'SYYYY-MM-DD') and BK.${key} <![CDATA[ <= ]]> TO_DATE('${endDate}', 'SYYYY-MM-DD')

        GROUP BY
        c.CCD,
        CASE
        WHEN bk.NLDW = '1' AND bk.SZNL >= 0 AND bk.SZNL <![CDATA[ <= ]]> 6 THEN '0-6岁小计'
        WHEN bk.NLDW = '1' AND bk.SZNL >= 7 AND bk.SZNL <![CDATA[ <= ]]> 18 THEN '7-18岁小计'
        ELSE NULL END,
        BK.GBSYDM,
        c.CCD_TNM

    </select>

 

3.注意

union用法中,两个select语句的字段类型匹配,而且字段个数要相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值