UNION
是 MySQL 中的一个 SQL 操作符,用于合并两个或多个 SELECT
语句的结果集,并且会自动去除重复的记录。它要求每个 SELECT
语句必须具有相同数量的列,并且对应的列必须具有相似的数据类型。
UNION
可以避免编写复杂的连接查询。UNION
会自动去除结果集中的重复记录。UNION
可能比复杂的连接查询更高效。UNION
会去除重复的记录。SELECT
语句的结果集合并在一起。假设你有两个表,一个是 employees
表,另一个是 contractors
表,它们都包含员工的信息,但一个是正式员工,另一个是合同工。如果你想获取所有员工的信息,并且去除重复的记录,可以使用 UNION
。
SELECT id, name, role FROM employees
UNION
SELECT id, name, role FROM contractors;
UNION
查询结果不正确?原因:
SELECT
语句中的列数必须相同。UNION
默认会去除重复记录,可能会影响结果的顺序。解决方法:
SELECT
语句中的列数是否相同。ORDER BY
子句,但需要在每个 SELECT
语句中都使用。(SELECT id, name, role FROM employees ORDER BY id)
UNION
(SELECT id, name, role FROM contractors ORDER BY id);
UNION ALL
查询结果包含重复记录?原因:
UNION ALL
不会去除重复记录,只是简单地将多个 SELECT
语句的结果集合并在一起。
解决方法:
如果不需要去重,可以使用 UNION ALL
,否则使用 UNION
。
假设有两个表 employees
和 contractors
:
-- employees 表
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
role VARCHAR(50)
);
-- contractors 表
CREATE TABLE contractors (
id INT PRIMARY KEY,
name VARCHAR(100),
role VARCHAR(50)
);
-- 插入示例数据
INSERT INTO employees (id, name, role) VALUES (1, 'Alice', 'Developer');
INSERT INTO employees (id, name, role) VALUES (2, 'Bob', 'Manager');
INSERT INTO contractors (id, name, role) VALUES (2, 'Bob', 'Contractor');
INSERT INTO contractors (id, name, role) VALUES (3, 'Charlie', 'Tester');
查询所有员工信息并去重:
SELECT id, name, role FROM employees
UNION
SELECT id, name, role FROM contractors;
查询所有员工信息但不去重:
SELECT id, name, role FROM employees
UNION ALL
SELECT id, name, role FROM contractors;
领取专属 10元无门槛券
手把手带您无忧上云