UNION和UNION ALL之间的区别是什么?


当前回答

我补充一个例子,

UNION,它与不同-->的合并速度较慢,因为它需要比较(在Oracle SQL开发人员中,选择查询,按F10查看成本分析)。

UNION ALL,它在合并时没有明显的-->,速度更快。

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

and

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

其他回答

联合,联合UNION命令用于从两个表中选择相关信息,非常类似于JOIN命令。但是,在使用UNION命令时,所有选定的列都需要具有相同的数据类型。使用UNION,仅选择不同的值。

联合所有人UNION ALL命令与UNION命令相同,但UNION ALL选择所有值。

Union和Union all的区别在于Union all不会消除重复的行,相反,它只是从所有符合查询细节的表中提取所有行,并将它们组合到一个表中。

UNION语句有效地对结果集执行SELECT DISTINCT。如果您知道从联合返回的所有记录都是唯一的,请改用union all,这样可以更快地获得结果。

如果没有ORDERBY,UNION ALL可能会按原样返回行,而UNION则会让您等到查询的最后一刻,然后立即向您提供整个结果集。这在超时情况下会有所不同——UNION ALL会保持连接的活动状态。

因此,如果您有超时问题,并且没有排序,重复也不是问题,UNION ALL可能会非常有用。

UNION将两个结构兼容的表的内容合并为一个组合表。

差异:

UNION和UNION ALL的区别在于UNION将省略重复记录,而UNION ALL将包含重复记录。

联合结果集按升序排序,而联合所有结果集不排序

UNION对其结果集执行DISTINCT,以便消除任何重复的行。而UNION ALL不会删除重复项,因此它比UNION更快*

注意:UNION ALL的性能通常会优于UNION,因为UNION需要服务器执行删除任何重复项的额外工作。因此,如果确定不会有任何重复项,或者有重复项不是问题,出于性能原因,建议使用UNION ALL。

(来自Microsoft SQL Server联机丛书)

联合[所有]

指定将多个结果集合并并作为单个结果集返回。

ALL

将所有行合并到结果中。这包括重复项。如果未指定,将删除重复的行。

如果对结果应用类似DISTINCT的重复行查找,UNION将花费太长时间。

SELECT * FROM Table1
UNION
SELECT * FROM Table2

相当于:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

对结果应用DISTINCT的副作用是对结果进行排序操作。

UNION ALL结果将显示为结果上的任意顺序,但UNION结果将显示成order BY 1,2,3。。。,n(n=表的列数)应用于结果。当没有任何重复行时,可以看到这种副作用。

UNION和UNION ALL都连接两个不同SQL的结果。它们处理重复项的方式不同。

UNION对结果集执行DISTINCT,消除所有重复的行。UNION ALL不删除重复项,因此它比UNION更快。

注意:使用此命令时,所有选定的列都需要具有相同的数据类型。

示例:如果我们有两个表,1)员工和2)客户

员工表数据:

客户表数据:

UNION示例(它删除所有重复记录):

UNION ALL示例(它只是连接记录,而不是消除重复,因此比UNION更快):