Skip to main content

SQL UNION

· 3 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 决定。
  • 复杂查询中可配合 WHEREGROUP BY 等使用。

与 JOIN 的区别

  • JOIN:横向连接表(扩展列)。
  • UNION:纵向叠加结果(扩展行)。

例如,JOIN 将两个表的列并排,而 UNION 将行上下堆叠。