Z
ZHANK
编程在线教程SQL 教程UNION 合并结果集
多表查询

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 的区别

UNIONJOIN
方向纵向拼接(加行)横向拼接(加列)
条件不要求关联条件需要 ON 条件
结果多个表数据堆叠把关联数据拼在同一行