有时候一个查询语句无法满足需求,需要把两个或多个查询结果合并在一起。这时就可以使用 UNION 或 UNION ALL。
UNION 用于合并多个 SELECT 查询结果,并自动去重。
基本语法如下:
SELECT 字段列表 FROM 表1
UNION
SELECT 字段列表 FROM 表2;例如:
SELECT name
FROM employee_china
UNION
SELECT name
FROM employee_usa;这表示把两张表中的员工姓名合并成一个结果集,并去掉重复值。
使用 UNION 时要注意:
- 多个
SELECT返回的列数必须一致 - 对应列的数据类型应该兼容
- 默认会做去重处理
UNION ALL 和 UNION 类似,但不会去重。
例如:
SELECT name
FROM employee_china
UNION ALL
SELECT name
FROM employee_usa;如果同一个名字在两张表中都存在,UNION ALL 会保留两条记录。
它的特点是:
- 不做去重
- 性能通常比
UNION更高 - 适合明确需要保留重复数据的场景
例如查询两张日志表的所有记录:
SELECT id, created_at
FROM log_2025
UNION ALL
SELECT id, created_at
FROM log_2026;UNION 用于合并结果并去重,UNION ALL 用于合并结果但保留重复数据。是否去重,是它们最核心的区别。