推荐答案
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。它会自动去除重复的行,除非使用 UNION ALL。UNION 的基本语法如下:
SELECT column1, column2, ... FROM table1 UNION SELECT column1, column2, ... FROM table2;
- 每个
SELECT语句必须有相同数量的列。 - 列的数据类型必须兼容。
- 列的顺序必须一致。
本题详细解读
1. UNION 的基本用法
UNION 用于将多个 SELECT 语句的结果集合并为一个结果集。默认情况下,UNION 会去除重复的行。例如:
SELECT name FROM employees UNION SELECT name FROM contractors;
这个查询会返回 employees 表和 contractors 表中所有不重复的 name 值。
2. UNION ALL 的用法
如果你希望保留所有行,包括重复的行,可以使用 UNION ALL。例如:
SELECT name FROM employees UNION ALL SELECT name FROM contractors;
这个查询会返回 employees 表和 contractors 表中所有的 name 值,包括重复的行。
3. UNION 的列要求
列数相同:每个
SELECT语句必须有相同数量的列。如果列数不同,MySQL 会报错。数据类型兼容:列的数据类型必须兼容。例如,你不能将一个
INT类型的列与一个VARCHAR类型的列合并。列顺序一致:列的顺序必须一致。第一个
SELECT语句的第一列将与第二个SELECT语句的第一列合并,依此类推。
4. UNION 的性能考虑
去重开销:
UNION默认会去除重复的行,这可能会导致性能开销,尤其是在处理大量数据时。如果你不需要去重,使用UNION ALL会更高效。索引使用:确保
SELECT语句中的列有适当的索引,以提高查询性能。
5. UNION 的排序
你可以在 UNION 的最后使用 ORDER BY 对整个结果集进行排序。例如:
SELECT name FROM employees UNION SELECT name FROM contractors ORDER BY name;
这个查询会返回合并后的结果集,并按 name 进行排序。
6. UNION 的嵌套
UNION 可以嵌套使用,但要注意每个 SELECT 语句的列数和数据类型必须一致。例如:
(SELECT name FROM employees UNION SELECT name FROM contractors) UNION SELECT name FROM freelancers;
这个查询会返回 employees、contractors 和 freelancers 表中所有不重复的 name 值。