一、前言
- UNION 和 UNION ALL 是 SQL 中用于合并多个查询结果集的关键字。
二、核心作用
- 两者均用于将多个 SELECT 语句的结果集纵向合并(列结构需相同),但行为存在关键差异:
三、使用场景对比
- 需要去重时:例如合并两个客户表且避免重复记录
sql
SELECT customer_id FROM table1
UNION
SELECT customer_id FROM table2;
- 需保留重复数据或追求性能时:例如统计日志数据时需保留所有条目
sql
SELECT log_time FROM debug_logs
UNION ALL
SELECT log_time FROM error_logs;
四、关键注意事项
- 列结构一致性
- 列数量、对齐顺序必须严格一致。
- 数据类型需兼容(如 VARCHAR 和 TEXT 可合并,但 INT 和 DATE 会报错)。
- 排序与别名
- 若需最终排序,仅在最后一个 SELECT 后加 ORDER BY:
sql
SELECT name FROM employees
UNION ALL
SELECT name FROM contractors
ORDER BY name; -- 整体排序
- 列名以第一个 SELECT 语句指定的字段别名为准。
五、示例
-
student表结构如下:
-
score表结构如下:
1.UNION查询结果

2.UNION ALL查询结果

六、总结
- UNION :适合数据去重场景,牺牲性能换取数据唯一性。
- UNION ALL :适合数据全量合并或性能敏感场景,尤其在大数据量时优先考虑。
- 实际使用时需根据数据特性和业务需求权衡选择。