mysql UNION 和 UNION ALL 区别

UNION 和 UNION ALL 是 SQL 中用于合并两个或多个 SELECT 语句结果集的操作符,但它们在处理结果集的方式上有所不同。

UNION

  1. 去重UNION 操作符会合并两个或多个 SELECT 语句的结果集,并自动去除重复的行。如果两个或多个 SELECT 语句返回的结果集中有相同的行(即所有列的值都相同),那么这些重复的行在最终结果集中只会出现一次。

  2. 排序:默认情况下,UNION 结果集中的行是不排序的,除非在最后一个 SELECT 语句中使用了 ORDER BY 语句对结果集进行排序。需要注意的是,ORDER BY 只能应用于最后一个 SELECT 语句,并且会对整个 UNION 结果集进行排序。

  3. 性能:由于 UNION 需要检查并去除重复的行,因此在处理大量数据时可能会比 UNION ALL 慢。

UNION ALL

  1. 不去重:与 UNION 不同,UNION ALL 操作符会合并两个或多个 SELECT 语句的所有结果集,包括重复的行。如果两个 SELECT 语句返回了相同的行,这些行在最终结果集中都会保留。

  2. 性能:由于 UNION ALL 不需要检查重复的行,因此它比 UNION 通常具有更好的性能,特别是在处理大量数据时。

示例

假设有两个表 students 和 graduates,它们都有列 name 和 age

  • 使用 UNION
SELECT name, age FROM students  
UNION  
SELECT name, age FROM graduates;

这个查询会合并 students 和 graduates 表中的行,并去除任何重复的行。

  • 使用 UNION ALL
SELECT name, age FROM students  
UNION ALL  
SELECT name, age FROM graduates;

这个查询会合并 students 和 graduates 表中的所有行,包括重复的行。

结论

选择 UNION 还是 UNION ALL 取决于具体需求:如果需要去除重复的行,那么使用 UNION;如果需要保留所有行,包括重复的,那么使用 UNION ALL。在性能敏感的场景下,如果确定结果集中不会有重复行,使用 UNION ALL 可能会获得更好的性能。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值