union all和union的区别 怎么使用
第一个网友回答如下: ---------------------------------------------------------------
一、区别1:取结果的交集
1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;
2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;
二、区别2:获取结果后的操作
1、union: 会对获取的结果进行排序操作
2、union all: 不会对获取的结果进行排序操作
三、区别3:
1、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
)