推荐答案
在 SQL 中,UNION
和 UNION ALL
运算符用于合并两个或多个 SELECT
语句的结果集。它们的主要区别在于 UNION
会自动去除重复的行,而 UNION ALL
会保留所有行,包括重复的行。
使用 UNION
合并查询结果
SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;
UNION
会合并两个SELECT
语句的结果集,并去除重复的行。- 两个
SELECT
语句的列数和数据类型必须匹配。
使用 UNION ALL
合并查询结果
SELECT column1, column2 FROM table1 UNION ALL SELECT column1, column2 FROM table2;
UNION ALL
会合并两个SELECT
语句的结果集,并保留所有行,包括重复的行。- 两个
SELECT
语句的列数和数据类型必须匹配。
本题详细解读
UNION
和 UNION ALL
的区别
UNION
:合并结果集时会自动去除重复的行。这意味着如果两个SELECT
语句返回的结果中有相同的行,UNION
只会保留其中一行。UNION ALL
:合并结果集时会保留所有行,包括重复的行。这意味着如果两个SELECT
语句返回的结果中有相同的行,UNION ALL
会保留所有重复的行。
使用场景
UNION
:适用于需要合并结果集并且去除重复数据的场景。例如,合并两个表中的唯一用户列表。UNION ALL
:适用于需要合并结果集并且保留所有数据的场景。例如,合并两个表中的所有订单记录,即使有重复的订单。
注意事项
- 列数和数据类型:使用
UNION
或UNION ALL
时,两个SELECT
语句的列数和数据类型必须匹配。否则,SQL 会抛出错误。 - 性能:
UNION
由于需要去除重复行,通常比UNION ALL
更消耗性能。如果不需要去除重复行,建议使用UNION ALL
以提高查询效率。
示例
假设有两个表 employees
和 contractors
,它们都有 name
和 department
列。
使用 UNION
合并结果
SELECT name, department FROM employees UNION SELECT name, department FROM contractors;
- 结果将包含所有员工和合同工的唯一记录,重复的记录会被去除。
使用 UNION ALL
合并结果
SELECT name, department FROM employees UNION ALL SELECT name, department FROM contractors;
- 结果将包含所有员工和合同工的所有记录,包括重复的记录。