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