UNION 和 UNION ALL 都是 SQL 中用于合并两个或多个 SELECT 语句的结果集的操作符。它们的主要区别在于如何处理重复的行。下面将分别介绍 union 和 union all 语句,并且使用 mysql 来演示验证。
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,输出结果如下:
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,输出结果如下:
如果你确定两个或多个 SELECT 语句的结果集中不会有重复的行,或者你希望保留所有的重复行,那么应该使用 UNION ALL,因为它通常更快(因为缺少了去重的步骤)。
如果你希望合并的结果集中不包含任何重复的行,那么应该使用 UNION,相比 UNION ALL 要慢些。