MySQL 两个结果集合并的实用技巧

在数据库操作中,我们经常需要将两个或多个查询结果集合并为一个结果集以便于分析和处理。MySQL 提供了多种方法来实现这一功能,本文将介绍如何使用 UNIONUNION ALL 操作符来合并两个查询结果集,并提供一些实用的代码示例。

什么是 UNIONUNION ALL

UNIONUNION ALL 都是用于合并两个或多个 SELECT 语句的结果集的操作符。它们的主要区别在于:

  • UNION:自动去除重复的行,相当于对结果集进行了去重。
  • UNION ALL:不去除重复的行,直接将所有结果合并。

使用 UNION 合并结果集

假设我们有两个查询,分别查询员工的姓名和部门,以及部门的名称和经理的姓名:

SELECT name AS '姓名', department AS '部门' FROM employees;
SELECT department AS '部门', manager_name AS '经理' FROM departments;
  • 1.
  • 2.

使用 UNION 将这两个查询的结果集合并,代码如下:

SELECT name AS '姓名', department AS '部门' FROM employees
UNION
SELECT department AS '部门', manager_name AS '经理' FROM departments;
  • 1.
  • 2.
  • 3.

使用 UNION ALL 合并结果集

如果我们需要保留所有行,包括重复的行,可以使用 UNION ALL

SELECT name AS '姓名', department AS '部门' FROM employees
UNION ALL
SELECT department AS '部门', manager_name AS '经理' FROM departments;
  • 1.
  • 2.
  • 3.

代码示例

以下是使用 UNIONUNION ALL 的一个具体示例:

-- 假设我们有两个表:employees 和 departments
CREATE TABLE employees (
  id INT PRIMARY KEY,
  name VARCHAR(100),
  department VARCHAR(100)
);

CREATE TABLE departments (
  id INT PRIMARY KEY,
  department VARCHAR(100),
  manager_name VARCHAR(100)
);

-- 插入一些示例数据
INSERT INTO employees (id, name, department) VALUES (1, 'Alice', 'HR');
INSERT INTO employees (id, name, department) VALUES (2, 'Bob', 'IT');

INSERT INTO departments (id, department, manager_name) VALUES (1, 'HR', 'Charlie');
INSERT INTO departments (id, department, manager_name) VALUES (2, 'IT', 'David');

-- 使用 UNION 合并结果集
SELECT name AS '姓名', department AS '部门' FROM employees
UNION
SELECT manager_name AS '姓名', department AS '部门' FROM departments;

-- 使用 UNION ALL 合并结果集
SELECT name AS '姓名', department AS '部门' FROM employees
UNION ALL
SELECT manager_name AS '姓名', department AS '部门' FROM departments;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

甘特图

为了更好地展示 UNIONUNION ALL 的执行过程,我们可以使用甘特图来表示:

合并查询结果集的流程 00:00 00:15 00:30 00:45 01:00 01:15 01:30 01:45 02:00 Employees Employees Departments Departments UNION 查询 UNION ALL 查询 合并查询结果集的流程

结语

通过本文的介绍,我们了解到了如何使用 UNIONUNION ALL 来合并两个查询结果集。这两种方法各有优势,选择使用哪一种取决于我们是否需要去除重复的行。在实际应用中,根据具体需求灵活运用这些技巧,可以大大提高我们的工作效率。