2026-01-02 23:31:14
SQL 中 UNION 用于合并两个或多个结构相同的 SELECT 语句结果集,要求列数和数据类型兼容,默认去重且效率较低,UNION ALL 保留重复项但效率更高。 以下是详细说明:
1. UNION 的基本语法UNION 的核心功能是将多个 SELECT 查询的结果合并为一个结果集,其基本语法结构如下:
SELECT column1, column2, ... FROM table1UNIONSELECT column1, column2, ... FROM table2;
自动去重:合并结果时会删除重复行,确保每行数据唯一。
效率较低:因需去重操作,数据库需额外处理,性能开销较大。
适用场景:明确需要去除重复数据时使用。
保留所有行:直接合并所有结果,包括重复项。
效率更高:无需去重,执行速度更快。
适用场景:确定无重复或允许重复时优先使用。


数量不一致:如第一个 SELECT 选 3 列,第二个选 2 列,会报错。
顺序不一致:即使列名相同,顺序不同也可能导致逻辑错误或报错。-- 错误示例:列顺序不一致SELECT id, name FROM table1UNIONSELECT name, id FROM table2; -- 可能报错或逻辑错误
如第一个 SELECT 的某列为整数型,第二个为字符型,会报错。
误用 UNION 导致不必要的去重操作,应优先使用 UNION ALL。
混用带 WHERE 和不带 WHERE 的查询,可能导致结果不符合预期。
最终结果集的列名取自第一个 SELECT 语句,若需明确列名,可在第一个 SELECT 中使用别名:SELECT name AS customer_name FROM customers WHERE city = '北京'UNIONSELECT name FROM customers WHERE city = '上海';
UNION 是 SQL 中合并结果集的强大工具,但需严格遵循列数、顺序和数据类型兼容性规则。根据是否需要去重选择 UNION 或 UNION ALL,并注意排序、别名和性能优化。合理使用可显著提升查询效率与结果准确性。