SQL 中 union 和 union all 语句的区别

SQL
UNION 和 UNION ALL 都是 SQL 中用于合并两个或多个 SELECT 语句的结果集的操作符。它们的主要区别在于如何处理重复的行。

UNION 和 UNION ALL 都是 SQL 中用于合并两个或多个 SELECT 语句的结果集的操作符。它们的主要区别在于如何处理重复的行。下面将分别介绍 union 和 union all 语句,并且使用 mysql 来演示验证。

UNION 语句(会去重)

UNION 会合并两个或多个 SELECT 语句的结果集,并自动去除重复的行。

这意味着如果两个 SELECT 语句返回的结果集中有相同的行,那么 UNION 的结果集中只会包含这一行的一个实例。

由于 UNION 需要检查并去除重复的行,所以它的性能通常比 UNION ALL 差一些。

示例:

select 'title1' as name from dual
union
select 'title1' as name from dual
union
select 'title2' as name from dual
union
select 'title2' as name from dual
union
select 'title3' as name from dual

执行上述SQL,输出结果如下:

image.png

UNION ALL(不去重)

UNION ALL 会合并两个或多个 SELECT 语句的结果集,但不会去除重复的行。

这意味着如果两个 SELECT 语句返回的结果集中有相同的行,那么 UNION ALL 的结果集中会包含这些行的所有实例。

由于 UNION ALL 不需要检查或去除重复的行,所以它的性能通常比 UNION 好一些。

示例:

select 'title1' as name from dual
union all
select 'title1' as name from dual
union all
select 'title2' as name from dual
union all
select 'title2' as name from dual
union all
select 'title3' as name from dual

执行上述SQL,输出结果如下:

image.png

如何选择 union 和 union all?

如果你确定两个或多个 SELECT 语句的结果集中不会有重复的行,或者你希望保留所有的重复行,那么应该使用 UNION ALL,因为它通常更快(因为缺少了去重的步骤)。

如果你希望合并的结果集中不包含任何重复的行,那么应该使用 UNION,相比 UNION ALL 要慢些。

我们愈是学习,愈觉得自己的贫乏。 —— 雪莱
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号