基本语法结构
sql
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
-
列数要求
所有
SELECT语句的列数必须完全一致,否则会触发语法错误。 -
列名规则
最终结果集的列名以第一个
SELECT语句中的列名为准,后续语句的列名不影响输出。
UNION 与 UNION ALL 的区别
- UNION:合并结果集并自动去除重复记录。
- UNION ALL:合并结果集并保留所有记录(包括重复项)。
示例 1: 使用 UNION 合并用户和产品名称
sql
SELECT name FROM users
UNION
SELECT product_name FROM products;
结果集示例
| name |
|---|
| Alice |
| Bob |
| Laptop |
| Phone |
示例 2: 使用 UNION ALL 合并员工薪资(含重复)
sql
SELECT name, salary FROM employees
UNION ALL
SELECT name, salary FROM contractors;
结果集示例
| name | salary |
|---|---|
| Alice | 5000 |
| Bob | 6000 |
| Alice | 5000 |
| Carol | 5500 |
结果集排序规则
ORDER BY需置于最后一个 SELECT 语句后,对整个结果集生效。
示例 3: 合并学生和教师年龄并降序排序
sql
SELECT name, age FROM students
UNION
SELECT name, age FROM teachers
ORDER BY age DESC;
结果集示例
| name | age |
|---|---|
| Bob | 45 |
| Alice | 30 |
| Carol | 25 |
关键注意事项
- 所有 SELECT 语句的列数必须一致。
- 对应列的数据类型应兼容。
UNION会隐式去重,可能增加性能开销;明确不需要去重时优先使用UNION ALL。