union用于合并多个select结果集,要求列数相同且数据类型兼容,UNION去重而UNION ALL保留重复行,性能更高;可用于合并结构相似表、统一查询结果或跨表搜索,排序需在最后用ORDER BY。

在 mysql 中,UNION 操作符用于合并两个或多个 SELECT 查询的结果集。使用 UNION 可以将多个查询的输出组合成一个结果表,常用于从不同表中提取结构相似的数据。
UNION 的基本语法
UNION 的基本结构如下:
SELECT 列1, 列2 FROM 表1
UNION
SELECT 列1, 列2 FROM 表2;
注意:每个 SELECT 语句中的列数必须相同,对应列的数据类型也需要兼容。
UNION 与 UNION ALL 的区别
UNION 会自动去除结果中的重复行,而 UNION ALL 保留所有行,包括重复项。
- 如果不需要去重,使用 UNION ALL 性能更高
- 如果数据中可能存在重复且希望只保留唯一记录,使用 UNION
示例:
SELECT name FROM users
UNION ALL
SELECT name FROM admins;
这个查询会返回 users 和 admins 表中所有的 name,包括重复值。
使用场景和注意事项
常见用途包括:
- 合并来自多个结构相似表的数据(如按时间分表的日志)
- 统一不同来源但字段含义相同的查询结果
- 实现跨表搜索功能
使用时需注意:
- 每个 SELECT 的列数必须一致
- 对应列的数据类型应兼容
- 排序操作应放在最后一个 SELECT 后使用 ORDER BY
- 可以结合 WHERE、LIMIT 等子句进行过滤
例如对合并结果排序:
SELECT id, name FROM students
UNION
SELECT id, name FROM teachers
ORDER BY name; 基本上就这些,合理使用 UNION 能让数据整合更灵活高效。