MySQL UNION
用 UNION 纵向拼接多条查询结果,理解去重与列对齐。
Key PointsUNION 会自动去重、UNION ALL 保留重复;两边列数必须一致。
UNION 与 UNION ALL
SQL
SELECT username FROM users WHERE age < 30
UNION
SELECT username FROM users WHERE age > 25;
-- 不去重、更快:
SELECT username FROM users WHERE age < 30
UNION ALL
SELECT username FROM users WHERE age > 25;Output
+----------+
| username |
+----------+
| alice |
| carol |
+----------+规则与注意
- 两边 SELECT 的列数、顺序必须一致
- 列名以第一条 SELECT 为准
- UNION 去重(隐式 DISTINCT),UNION ALL 不去重且更快
- ORDER BY / LIMIT 要放在最后一条
In most cases
UNION ALL is enough — the implicit DISTINCT in UNION adds a dedupe+sort cost you rarely need.UNION 与 UNION ALL
SQL
SELECT username FROM users WHERE age < 30
UNION
SELECT username FROM users WHERE age > 25;
-- 不去重、更快:
SELECT username FROM users WHERE age < 30
UNION ALL
SELECT username FROM users WHERE age > 25;Output
+----------+
| username |
+----------+
| alice |
| carol |
+----------+规则与注意
- 两边 SELECT 的列数、顺序必须一致
- 列名以第一条 SELECT 为准
- UNION 去重(隐式 DISTINCT),UNION ALL 不去重且更快
- ORDER BY / LIMIT 要放在最后一条
绝大多数场景用
UNION ALL 即可,因为应用层往往自己能去重;UNION 的额外去重排序代价不小,别无脑用。