推荐答案
在 SQL 中,UNION
和 UNION ALL
都用于合并两个或多个 SELECT
语句的结果集,但它们的主要区别在于是否去重。
- UNION:合并结果集并去除重复的行。
- UNION ALL:合并结果集但保留所有行,包括重复的行。
本题详细解读
UNION
- 去重:
UNION
会自动去除结果集中的重复行。这意味着如果两个SELECT
语句返回的结果中有相同的行,UNION
只会保留其中的一行。 - 性能:由于
UNION
需要去重,因此它的性能通常比UNION ALL
差,尤其是在处理大数据集时。 - 语法:
SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;
UNION ALL
- 不去重:
UNION ALL
不会去除结果集中的重复行。它会将所有行合并,包括重复的行。 - 性能:由于
UNION ALL
不需要去重,因此它的性能通常比UNION
更好,尤其是在处理大数据集时。 - 语法:
SELECT column1, column2 FROM table1 UNION ALL SELECT column1, column2 FROM table2;
使用场景
- UNION:当你需要合并结果集并且确保结果中没有重复行时,使用
UNION
。 - UNION ALL:当你不需要去重,或者你知道结果集中不会有重复行时,使用
UNION ALL
。
示例
假设有两个表 table1
和 table2
,它们的数据如下:
table1
id | name |
---|---|
1 | Alice |
2 | Bob |
table2
id | name |
---|---|
2 | Bob |
3 | Carol |
使用 UNION:
SELECT name FROM table1 UNION SELECT name FROM table2;
结果:
name Alice Bob Carol 使用 UNION ALL:
SELECT name FROM table1 UNION ALL SELECT name FROM table2;
结果:
name Alice Bob Bob Carol