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


当前回答

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

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

其他回答

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

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

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

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

员工表数据:

客户表数据:

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

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

UNION和UNION ALL之间的基本区别是联合操作从结果集中消除了重复的行,但联合ALL在合并后返回所有行。

从…起http://zengin.wordpress.com/2007/07/31/union-vs-union-all/

重要的Oracle和Mysql之间的区别:假设t1和t2之间没有重复的行,但它们各自有重复的行。示例:t1从2017年开始销售,t2从2018年开始销售

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

在ORACLE UNION ALL中,从两个表中获取所有行。MySQL中也会发生同样的情况。

然而:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

在ORACLE中,UNION从两个表中提取所有行,因为t1和t2之间没有重复的值。另一方面,在MySQL中,结果集的行数将更少,因为表t1和表t2中都有重复的行!

UNION删除重复的记录(结果中的所有列都相同),UNION all不删除。

当使用UNION而不是UNION ALL时,性能会受到影响,因为数据库服务器必须做额外的工作来删除重复的行,但通常您不希望重复的行(尤其是在开发报表时)。

要识别重复项,记录必须是可比较类型以及兼容类型。这取决于SQL系统。例如,系统可以截断所有长文本字段以生成短文本字段进行比较(MS Jet),或者可以拒绝比较二进制字段(ORACLE)

UNION示例:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

结果:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

UNION ALL示例:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

结果:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

不确定哪个数据库很重要

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

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