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


当前回答

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

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

其他回答

不确定哪个数据库很重要

UNION和UNION ALL应适用于所有SQL Server。

您应该避免不必要的UNION,它们是巨大的性能泄漏。根据经验,如果您不确定要使用哪个,请使用UNION ALL。

UNION-在UNION ALL-生成包括重复项在内的所有记录。

两者都是阻塞运算符,因此我个人更喜欢在任何时候使用JOIN而不是阻塞运算符(UNION、INTERSECT、UNION ALL等)。

为了说明为什么Union操作与Union All相比执行得很差,请执行以下示例。

CREATE TABLE #T1 (data VARCHAR(10))

INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'


CREATE TABLE #T2 (data VARCHAR(10))

INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'

以下是UNION ALL和UNION操作的结果。

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

使用UNION会导致执行计划中的不同排序操作。证明该声明的证据如下:

UNION ALL还可以处理更多的数据类型。例如,当尝试联合空间数据类型时。例如:

select a.SHAPE from tableA a
union
select b.SHAPE from tableB b

将投掷

数据类型几何图形不能用作UNION、INTERSECT或EXCEPT运算符的操作数,因为它不可比较。

然而,工会都不会。

在ORACLE:UNION不支持BLOB(或CLOB)列类型,UNION ALL支持。

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

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

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

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