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语句的字段类型匹配,而且字段个数要相同

猜你喜欢

转载自blog.csdn.net/weixin_39936341/article/details/82385264