我不是问他们之间的区别,我的问题是我们什么时候需要使用“Union All”?“Union all”有什么用?
回答
如果您确实需要使用UNION时可能会删除的多个“副本”行,则可以使用UNION ALL。在查询结束时它也可以更快,因为数据库引擎不需要确定结果集之间的重复内容。
+1用于指定UNION ALL的可能场景 – Christian 2010-10-11 07:02:52
+1用于提及性能 - 这几乎是至关重要的,需要了解UNION与UNION ALL对于更大表的影响,其中UNION的执行速度将比UNION ALL慢几个数量级对于大的结果集(因为在大多数情况下删除重复意味着建立临时索引;对于较小的结果集,这不会太昂贵,结果集的大小是返回的行数*) – Unreason 2010-10-11 07:10:11
我会说“可以容忍”多个副本反对“需要”。例如,当你说'WHERE ForeignKey IN(SELECT ID FROM view1 UNION ALL SELECT ID FROM view2)'。你不需要两者兼顾,但是你可以放心使用 – 2012-06-22 18:33:54
当我们不需要从记录排除重复的行
- 联盟将删除重复
- 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
如果您正在进行大量JOIN并且有冗余行,您会使用GROUP BY而不是UNION吗? UNION和DISTINCT有什么区别? – 2010-10-11 07:05:58
@meder:GROUP BY删除重复项是滥用:它是为了聚合。 DISTINCT是每个SELECT。也就是说,我可以有SELECT DISTINCT .. UNION ALL SELECT ...如果需要的话。这意味着去除重复的第一个子句,但是取出UNION上的所有行。 – gbn 2010-10-11 07:25:58
当你需要使用它们时以您的要求结束。 UNION和UNION ALL之间的区别在于UNION ALL不删除重复的行。
Union all
用于连接多个数据集到一个单一的数据集,但它不会删除重复
您使用UNION ALL来连接(追加)两个结果集到一个单一的结果集,当他们有相同的列(数量和类型)。
一个例子可以更清晰:
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
。
为什么Union
或Union all
?
Ans: 如果您正在查看来自两个或更多不同表格(我的意思是关系)的一些数据,那么您可以使用它。
因为结果将会是一个表格,并且每个表格都应该有一个关键字,并且UNION
可以确保唯一的行,所以理论上应该始终使用UNION
。但是,因为UNION ALL
不确保唯一行,所以UNION ALL
可以执行得更好,因此如果您可以确定两个表都已经包含唯一行,那么在实践中可能会首选。
相同的逻辑适用于SELECT DISTINCT
和SELECT ALL
之间的选择,BTW。
默认情况下,UNION将消除重复值。如果用UNIONALL替换UNION,则不会消除重复值。 :)
- 1. 为什么UNION ALL有和没有括号表现不一样?
- 2. UNION vs UNION ALL的性能
- 3. TSQL union all - error
- 4. 这个UNION ALL mysql查询有什么问题?
- 5. 使用UNION ALL和INNER JOIN
- 6. UNION ALL把戏ORACLE
- 7. Postgresql:创建表时,UNION ALL比UNION慢?
- 8. 为什么UNION ALL似乎要等两个查询结束?
- 9. 为什么c#没有union?
- 10. Getteing与UNION ALL SQL查询
- 11. MS Access:SQL查询“Union All”
- 12. 订购的蜂巢UNION ALL
- 13. 多个表中的UNION ALL
- 14. 如何删除union all?
- 15. UNION ALL - 获取表名
- 16. SQL - 如何UNION ALL IF @RowCount
- 17. MySQL的UNION ALL - 值优先
- 18. MySql语法(Join,UNION ALL)?
- 19. 如何让UNION ALL更快?
- 20. 如何在LINQ中使用union all?
- 21. 在STUFF/XML路径中使用UNION ALL
- 22. 如何在JPA中使用UNION ALL?
- 23. 应使用哪种Union ALL方法?
- 24. 用UNION ALL填充输入数据集ALL SQL查询
- 25. 我使用UNION ALL,那么我想ORDER BY globaly
- 26. 使用UNION ALL模糊定义的Oracle SQL列所有
- 27. Union All - Union None?仅查找非重复项?
- 28. SQL_CALC_FOUND_ROWS和UNION查询(而不是UNION ALL)与LIMIT
- 29. Union与Union ALL如果行是唯一的
- 30. union和join有什么区别?
谢谢,你所有的答案说,只有两个要点1.)重复行和2)。性能。这意味着我们可以使用其中的任何一个,所以我不明白为什么我们不能在这个查询中使用union。 与TempData的作为 ( 选择32 COL1,CHAR(32)如COL2 UNION ALL 选择COL1 + 1,焦炭(从TempData的COL1 + 1)其中,COL1 <127 ) SELECT * FROM的TempData – 2010-10-11 07:28:14
@Jeevan Bhatt - 当您在查询中使用'UNION'而不是'UNION ALL'会发生什么?你在用什么数据库? – 2010-10-11 11:01:54
@Jeevan Bhatt - 查看了一下你的查询我相信有一些语法错误会阻止它执行。 CTE中的第一个子查询缺少一个FROM子句,而第二个子查询是指CTE内的CTE,这是不允许的。你想要完成什么? – 2010-10-11 11:06:10