union all和union的区别 怎么使用

union all和union的区别 怎么使用
 
第一个网友回答如下:   ---------------------------------------------------------------
 
一、区别1:取结果的交集
 
1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;
 
2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;
 
二、区别2:获取结果后的操作
 
1、union: 会对获取的结果进行排序操作
 
2、union all: 不会对获取的结果进行排序操作
 
三、区别31、union看到结果中ID=3的只有一条
 
select * from student2 where id < 4
 
union
 
select * from student2 where id > 2 and id < 6
 
2、union all 结果中ID=3的结果有两个
 
select * from student2 where id < 4
 
union all
 
select * from student2 where id > 2 and id < 6
 
四、总结
 
union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高
 
第二个网友回答如下:   ---------------------------------------------------------------
 
一、区别
 
1、显示结果不同
 
union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来。
 
2、对重复结果的处理不同
 
union all是直接连接,取到得是所有值,记录可能有重复;union 是取唯一值,记录没有重复。所以union在进行表链接后会筛选掉重复的记录,union all不会去除重复记录。
 
3、对排序的处理不同
 
union将会按照字段的顺序进行排序;union all只是简单的将两个结果合并后就返回。从效率上说,union all 要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用union all。
 
注意事项:
 
1、union 和 union all都可以将多个结果集合并,而不仅仅是两个,所以可将多个结果集串起来。 
 
2、使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。
 
二、使用方法
 
1、union:用于对多个select查询结果进行联合。
 
2、union all:用于对多个select查询结果进行联合。
 
3、union 和 union all 对select语句的要求:
 
   (1)各个select查询语句中,各个select查询的列数的个数必须相同,不能1个select查询的列数是4列,而另一个select查询的列数是7列。
 
   (2)各个select查询语句中,每个列的数据类型必须相同或相似。不能1个select的第1列是int类型,而另一个select的第1列是nvarchar类型。

用法
如果用 order by 进行排序 一定要加上括号

(SELECT
             csc.id,
             csc.member_id,
             csc.menu_id,
             SUM(csc.num)            num,
             cmi.original_price,
             cmi.price               price,
             cmi.picture             menu_picture,
             cmi.NAME                menu_name,
             cmi.is_need_weigh,
             cmi.unit                bookQueueId,
             csc.menu_spec_id,
             csc.flavour,
             csc.menu_pack_type,
             cmi.abbreviated_picture abbreviated_picture,
             (SELECT name
              FROM cat_menu_library_spec
              WHERE id IN (
                  SELECT menu_spec_id
                  FROM shopping_cart s
                  WHERE
                      s.shop_id = #{shopId}
                      AND s.member_id = #{memberId}
                      AND s.num > 0
                      AND s.STATUS = 1
              )
             )                       created_by
         FROM
             shopping_cart csc
             INNER JOIN cat_menu cmi ON csc.menu_id = cmi.id
         WHERE
             csc.shop_id = #{shopId}
             AND csc.member_id = #{memberId}
             AND csc.num > 0
             AND csc.STATUS = 1
             AND csc.menu_pack_type = 0
             AND csc.source_type = 0
         GROUP BY
             csc.menu_id,
             csc.menu_spec_id,
             csc.flavour
         ORDER BY
             csc.last_updated_date
        )
 
        UNION ALL
 
        (SELECT
             cc.id,
             cc.member_id,
             cc.menu_id,
             SUM(cc.num)              num,
             cp.price                 original_price,
             cp.price                 price,
             cp.cover_img             menu_picture,
             cp.name                  menu_name,
             false                    isNeedWeigh,
             0                        bookQueueId,
             cc.menu_spec_id,
             cc.flavour,
             cc.menu_pack_type,
             cp.abbreviated_cover_img abbreviated_picture,
             '份'                      created_by
         FROM
             shopping_cart cc
             INNER JOIN cat_pack cp ON cc.menu_id = cp.id
         WHERE
             cc.shop_id = #{shopId}
             AND cc.member_id = #{memberId}
             AND cc.num > 0
             AND cc.STATUS = 1
             AND cc.menu_pack_type != 0
             AND cc.source_type = 0
         GROUP BY
             cc.menu_id,
             cc.menu_spec_id,
             cc.flavour
         ORDER BY
             cc.last_updated_date
        )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值