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 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号