推荐答案
在 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;
- 结果将包含所有员工和合同工的所有记录,包括重复的记录。