Skip to main content

SQL UNION

· 2 min read
skQxST

SQL UNION 是用于将多个 SELECT 查询的结果集合并为一个结果集的操作符。它的核心作用是将多个查询的结果“纵向叠加”,但需满足以下条件:


核心特点​

  1. 列数与顺序一致

    所有 SELECT 语句的列数必须相同,且对应列的数据类型要兼容(例如,不能将字符串和数字列合并)。

  2. 自动去重

    UNION 默认会去重(即合并后删除重复行)。如果希望保留重复行,需使用 UNION ALL。

  3. 结果集排序

    最终结果集的列名取自第一个 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 将行上下堆叠。