首页 > Mysql > MySQL 联合查询教程

MySQL 联合查询教程

2025-05-07 18:11:26

1. 联合查询的概念

在 MySQL 里,联合查询可把多个 SELECT 语句的结果集合并成一个结果集。联合查询主要有两种类型:UNION 和 UNION ALL

  • UNION:会对结果集进行去重处理,也就是说相同的行仅保留一行。
  • UNION ALL:会保留所有行,包含重复的行。由于不用进行去重操作,所以 UNION ALL 的执行效率通常比 UNION 高。

2. 语法

SELECT column1, column2, ...
FROM table1
[WHERE condition]
UNION [ALL]
SELECT column1, column2, ...
FROM table2
[WHERE condition];

3. 示例

假设我们有两个表: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');

4. 使用 UNION 进行联合查询

下面的查询会把 employees 表和 contractors 表中的所有员工与承包商的信息合并起来,并且去除重复的行:

5. 使用 UNION ALL 进行联合查询

下面的查询会把 employees 表和 contractors 表中的所有员工与承包商的信息合并起来,保留所有行,包含重复的行:

6. 注意事项

  • 列的数量和类型:参与联合查询的所有 SELECT 语句的列数量必须相同,并且对应的列的数据类型要兼容。
  • 排序:若要对联合查询的结果进行排序,可在最后一个 SELECT 语句之后使用 ORDER BY 子句。
SELECT id, name, department
FROM employees
UNION
SELECT id, name, department
FROM contractors
ORDER BY department;
 

通过上述教程与示例,你应该对 MySQL 联合查询有了较为清晰的认识,并且能够在实际项目中运用联合查询来合并多个结果集。

使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top