SQL UNION
· 3 min read

SQL UNION 是用于将多个 SELECT
查询的结果集合并为一个结果集的操作符。它的核心作用是将多个查询的结果“纵向叠加”,但需满足以下条件:
核心特点
-
列数与顺序一致
所有
SELECT
语句的列数必须相同,且对应列的数据类型要兼容(例如,不能将字符串和数字列合并)。 -
自动去重
UNION
默认会去重(即合并后删除重复行)。如果希望保留重复行,需使用UNION ALL
。 -
结果集排序
最终结果集的列名取自第一个
SELECT
语句的列名。如果需要对合并后的结果排序,只能在最后一个SELECT
后添加ORDER BY
。
语法示例
SELECT column1, column2 FROM table1
UNION
SELECT columnA, columnB FROM table2;
典型场景
1. 合并多个表的相似数据
例如,将“员工表”和“客户表”中的姓名合并为一个列表:
SELECT name FROM employees
UNION
SELECT customer_name FROM customers;
2. 分块查询后汇总
例如,统计不同地区的销售额:
SELECT 'North' AS region, SUM(sales) FROM north_sales
UNION
SELECT 'South', SUM(sales) FROM south_sales;
UNION vs. UNION ALL
操作符 | 是否去重 | 性能 |
---|---|---|
UNION | 是 | 较慢(需去重) |
UNION ALL | 否 | 更快 |
如果确定数据无重复或允许重复,优先用 UNION ALL
以提高效率。
注意事项
- 合并时按列顺序匹配,与列名无关。
- 合并后的列名由第一个
SELECT
决定。 - 复杂查询中可配合
WHERE
、GROUP BY
等使用。
与 JOIN 的区别
- JOIN:横向连接表(扩展列)。
- UNION:纵向叠加结果(扩展行)。
例如,JOIN
将两个表的列并排,而 UNION
将行上下堆叠。