推荐答案
在 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