UNION 合并结果集
掌握 UNION/UNION ALL 合并多个查询结果
UNION 合并结果集
UNION 把多个 SELECT 的结果上下拼接成一个结果集——就像把两张表的行叠在一起。
学完本章你将: 掌握 UNION/UNION ALL、多表合并、与 JOIN 的区别。
UNION vs UNION ALL
sql
-- 两个查询结果的并集(自动去重)
SELECT city FROM users
UNION
SELECT city FROM suppliers;
-- UNION ALL 不去重,保留所有行(更快)
SELECT city FROM users
UNION ALL
SELECT city FROM suppliers;
💡 性能提示: 如果已知结果不重复,用
UNION ALL更快,因为数据库不需要额外排序去重。
使用规则
- 每个 SELECT 的列数必须相同
- 对应列的数据类型必须兼容
- 结果集的列名以第一个 SELECT 为准
- ORDER BY 只能放在最后
sql
SELECT name, email, '用户' AS type FROM users
UNION ALL
SELECT name, email, '供应商' AS type FROM suppliers
ORDER BY name;
多表合并
sql
-- 全年的订单(按月分表场景)
SELECT * FROM orders_2024_q1
UNION ALL
SELECT * FROM orders_2024_q2
UNION ALL
SELECT * FROM orders_2024_q3
UNION ALL
SELECT * FROM orders_2024_q4;
UNION vs JOIN 的区别
| UNION | JOIN | |
|---|---|---|
| 方向 | 纵向拼接(加行) | 横向拼接(加列) |
| 条件 | 不要求关联条件 | 需要 ON 条件 |
| 结果 | 多个表数据堆叠 | 把关联数据拼在同一行 |