我不是在问它们之间的区别,我的问题是我们什么时候需要使用“全部联合”?
发布于 2010-10-11 14:59:20
当您确实需要行的多个“副本”时,您可以使用UNION ALL,否则在使用UNION时这些行将被删除。它在查询端也可以更快,因为DB引擎不需要确定结果集之间的重复项。
发布于 2010-10-11 14:59:32
示例
SELECT 1 AS foo
UNION
SELECT 1 AS foo
= one row
SELECT 1 AS foo
UNION ALL
SELECT 1 AS foo
= two rows发布于 2010-10-11 15:06:14
举个例子就明白了:
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。
https://stackoverflow.com/questions/3904049
复制相似问题