在 MySQL 里,联合查询可把多个 SELECT
语句的结果集合并成一个结果集。联合查询主要有两种类型:UNION
和 UNION ALL
。
UNION
:会对结果集进行去重处理,也就是说相同的行仅保留一行。UNION ALL
:会保留所有行,包含重复的行。由于不用进行去重操作,所以 UNION ALL
的执行效率通常比 UNION
高。SELECT column1, column2, ...
FROM table1
[WHERE condition]
UNION [ALL]
SELECT column1, column2, ...
FROM table2
[WHERE condition];
假设我们有两个表:employees
和 contractors
,这两个表的结构与数据如下:
-- 创建 employees 表
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(100)
);
-- 插入数据
INSERT INTO employees (id, name, department) VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'IT'),
(3, 'Charlie', 'Finance');
-- 创建 contractors 表
CREATE TABLE contractors (
id INT PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(100)
);
-- 插入数据
INSERT INTO contractors (id, name, department) VALUES
(4, 'David', 'IT'),
(5, 'Eve', 'Finance'),
(6, 'Frank', 'HR');
UNION
进行联合查询下面的查询会把 employees
表和 contractors
表中的所有员工与承包商的信息合并起来,并且去除重复的行:
UNION ALL
进行联合查询下面的查询会把 employees
表和 contractors
表中的所有员工与承包商的信息合并起来,保留所有行,包含重复的行:
SELECT
语句的列数量必须相同,并且对应的列的数据类型要兼容。SELECT
语句之后使用 ORDER BY
子句。SELECT id, name, department
FROM employees
UNION
SELECT id, name, department
FROM contractors
ORDER BY department;
通过上述教程与示例,你应该对 MySQL 联合查询有了较为清晰的认识,并且能够在实际项目中运用联合查询来合并多个结果集。