MySQL中的UNION和UNION ALL详解
UNION和UNION ALL是MySQL中用于合并多个SELECT语句结果集的操作符,它们在数据合并方式和性能上有重要区别。
一、基本概念
1. UNION
- 合并两个或多个SELECT语句的结果集
- 自动去除重复行
- 默认按照第一个SELECT语句的列名显示结果
- 要求每个SELECT语句必须有相同数量的列
- 对应列的数据类型必须兼容
2. UNION ALL
- 合并两个或多个SELECT语句的结果集
- 保留所有行,包括重复行
- 其他语法要求与UNION相同
- 通常比UNION性能更好(因为不需要去重)
二、基本语法
SELECT column_name(s) FROM table1
UNION [ALL]
SELECT column_name(s) FROM table2
[UNION [ALL]
SELECT column_name(s) FROM table3 ...]
[ORDER BY clause]
[LIMIT clause];
三、UNION vs UNION ALL对比
特性 | UNION | UNION ALL |
---|---|---|
重复行处理 | 自动去除 | 保留所有重复行 |
性能 | 较慢(需要去重) | 较快(无需去重) |
排序 | 可能改变原始顺序 | 保留原始顺序 |
使用场景 | 需要唯一结果时 | 需要完整结果或已知无重复时 |
四、使用示例
1. 基本使用
-- 合并两个表的城市列表(去重)
SELECT city FROM customers
UNION
SELECT