“全联盟”有什么用?

时间:2010-10-11 06:57:36

标签: sql

我不是要求他们之间的区别,我的问题是我们何时需要使用“全联盟”?

12 个答案:

答案 0 :(得分:15)

如果您确实需要使用UNION时将删除的多个“副本”行,您将使用UNION ALL。它在查询结束时也可以更快,因为数据库引擎不需要确定结果集之间的重复内容。

答案 1 :(得分:7)

  • UNION将删除重复项
  • UNION ALL 删除重复项

实施例

SELECT 1 AS foo
UNION
SELECT 1 AS foo

= one row

SELECT 1 AS foo
UNION ALL
SELECT 1 AS foo

= two rows

答案 2 :(得分:4)

一个例子会说清楚:

mysql> select * from tmp1;
+------+
| a    |
+------+
| foo1 |
| foo2 |
+------+
2 rows in set (0.00 sec)

mysql> select * from tmp2;
+------+
| a    |
+------+
| foo2 |
| foo3 |
| foo4 |
+------+
3 rows in set (0.00 sec)

mysql> select * from tmp1 union select * from tmp2;
+------+
| a    |
+------+
| foo1 |
| foo2 |   # DUPLICATES REMOVED.
| foo3 |
| foo4 |
+------+
4 rows in set (0.00 sec)

mysql> select * from tmp1 union all select * from tmp2;
+------+
| a    |
+------+
| foo1 |
| foo2 |
| foo2 |    # DUPLICATES NOT REMOVED.
| foo3 |
| foo4 |
+------+
5 rows in set (0.00 sec)

问题何时使用UNION ALL?

如果您不关心结果集是否有重复行,或者您知道不会有任何重复项,请使用UNION ALL代替UNION

答案 3 :(得分:3)

当您需要使用它们时,取决于您的要求。 UNION和UNION ALL之间的区别在于UNION ALL不会删除重复的行。

答案 4 :(得分:2)

Union all用于将多个数据集合并到一个数据集中,但不会删除重复数据

答案 5 :(得分:1)

当我们不需要从记录集中排除重复的行

答案 6 :(得分:1)

当两个结果集具有相同的列(数字和类型)时,可以使用UNION ALL将两个结果集连接(追加)到单个结果集中。

答案 7 :(得分:1)

因为结果将是一个表,并且每个表都应该有一个键,并且UNION确保了唯一的行,所以理论上你应该总是使用UNION。但是,由于UNION ALL无法确保唯一行,UNION ALL可以更好地执行,因此如果您可以确定两个表都已包含唯一行,则可能在实践中首选。

同样的逻辑适用于SELECT DISTINCTSELECT ALL之间的选择,BTW。

答案 8 :(得分:0)

默认情况下,UNION将消除重复值。如果用UNIONALL替换UNION,则不会再消除重复值。 :)

答案 9 :(得分:0)

想象一下,您正在分析随着时间的推移在奥运会上美国的表现。您想从多个表中的多个天/年中堆叠(联盟)奖牌(银牌,金牌)。您不希望在国家/地区代码列上使用UNION,因为它会忽略有价值的信息。将会有许多具有美国和“黄金”的观测值,但每个观测值都是其自己的观测值。

答案 10 :(得分:0)

除了重复性和性能上的差异外,应该考虑的情况是,您希望结果本质上完全不同,但可以为例如操作提供常见的结果。

    Select name from table
     Union all
    Select max(name) from table

      Vs

     Select name from table
     Union 
    Select max(name) from table

如果max(name)与name相同,则union将给出一条记录,而union all将给出两条记录。但是为了使我能够知道名称的最大值与列表中某些特定名称的名称相同,请进行全部合并。我的意思是这是非常基本的情况。如果通常可以将join语句设置为不同,但在操作上会导致共同的结果

,那么all all可能会带来很多不同

答案 11 :(得分:-1)

为什么UnionUnion all

和: 如果您正在查看来自两个或更多不同表格(我的意思是关系)的一些数据,那么您可以使用它。