UNION 和 UNION ALL 用法及区别

UNION

UNION 是一个用于合并多个 SELECT 查询结果的操作符。它的作用是将多个查询的结果集合并为一个结果集,并去除重复的行。

主要特点和作用如下:

  • 合并结果集:UNION 操作符可以将多个查询的结果集合并为一个结果集。每个查询的结果集必须具有相同的列数和相似的数据类型。

  • 去除重复行:与 UNION ALL 操作符不同,UNION 会去除合并结果集中的重复行,只保留一份。它通过对结果集进行去重操作来实现。

  • 排序结果:UNION 默认会对合并后的结果集进行排序,以确保返回的结果是按照默认顺序排列的。如果需要自定义排序顺序,可以使用外部的 ORDER BY 子句来指定排序条件。

  • 数据类型匹配:在使用 UNION 进行结果集合并时,需要确保每个查询的选择列表中的列具有相似的数据类型,或者可以进行隐式类型转换。否则,可能会导致错误或意外的结果。

使用示例:

Copy code
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2

上述示例中,UNION 操作符将 table1 和 table2 的查询结果合并为一个结果集,并去除重复的行。

需要注意的是,UNION 操作符在进行结果集合并时会进行排序和去重操作,这可能会对性能产生一定的影响。如果确保结果集中不会存在重复的行,并且不需要进行排序,可以考虑使用性能更高的 UNION ALL 操作符。

总结起来,UNION 是用于合并多个查询结果集的操作符,它合并结果集并去除重复行,适用于需要合并结果集并去重的场景

UNION ALL

UNION ALL 是一个用于合并多个 SELECT 查询结果的操作符。它的作用是将多个查询的结果集合并为一个结果集,包含所有查询的结果,不去除重复行。

主要特点和作用如下:

  • 合并结果集:UNION ALL 操作符可以将多个查询的结果集合并为一个结果集。每个查询的结果集必须具有相同的列数和相似的数据类型。

  • 保留重复行:与 UNION 操作符不同,UNION ALL 不会去除重复的行。它简单地将所有查询的结果按照顺序连接起来,保留所有行,包括重复的行。

  • 性能优化:相对于 UNION 操作符,UNION ALL 的性能更高,因为它不需要进行重复行的去重操作。如果你确定结果集中不会存在重复的行,可以使用 UNION ALL 来获得更好的性能。

适用场景:UNION ALL 适用于需要合并多个查询结果集,并且不需要去除重复行的场景。例如,你可能需要从多个表或查询中检索相似的数据,然后将它们合并到一个结果集中进行进一步的处理或展示。

使用示例:

Copy code
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2

上述示例中,UNION ALL 操作符将 table1 和 table2 的查询结果合并为一个结果集,包含所有行。

需要注意的是,UNION ALL 不会对结果进行排序,默认情况下返回的结果是按照查询的顺序排列的。如果需要对结果进行排序,可以使用外部的 ORDER BY 子句来指定排序条件

总结起来,UNION ALL 是用于合并多个查询结果集的操作符,它保留所有行,不去除重复的行,适用于需要合并结果集并且不需要去重的场景。

例子

在这里插入图片描述
我们需要做的是将这张表转换 成行格式的数据。这里使用UNION ALL来实现。

--列数据转换成行数据:使用UNION ALL
SELECT employee, child_1 AS child FROM Personnel UNION ALL
SELECT employee, child_2 AS child FROM Personnel UNION ALL
SELECT employee, child_3 AS child FROM Personnel;
  • 执行结果

在这里插入图片描述

在这里插入图片描述

因为 UNION All 不会排除重复的行,所以即使吉田没有孩子,结果也会出现3行相关的数据
果里也会出现 3 行相关数据。把结果存入表时,最好先排除掉“child”列 为 NULL 的行。

如果使用UNION 连接,sql 和结果如下

SELECT child_1 FROM Personnel
UNION
SELECT child_2 FROM Personnel 
UNION
SELECT child_3 FROM Personnel;
  • 执行结果

在这里插入图片描述

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值