我已经从你的 全世界路过
像一颗流星 划过命运 的天空
很多话忍住了 不能说出口
珍藏在 我的心中
只留下一些回忆
🎵 牛奶咖啡《从你的全世界路过》
在数据库操作中,有时候我们需要将多个查询的结果合并为一个结果集。MySQL 提供了一个强大的功能——UNION,可以帮助我们实现这一目标。本文将详细介绍 MySQL UNION 的概念、使用方法以及一些实际应用场景。
什么是 MySQL UNION?
MySQL UNION 运算符用于将两个或多个 SELECT 查询的结果合并成一个结果集。每个 SELECT 语句的列数和数据类型必须相同。UNION 默认会去除重复的记录,如果需要保留重复记录,可以使用 UNION ALL。
基本语法
MySQL UNION 的基本语法如下:
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
使用 UNION ALL 以保留重复记录:
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
使用示例
示例 1:合并两个表的结果
假设我们有两个表,分别是 employees 和 managers,结构如下:
CREATE TABLE employees (
id INT,
name VARCHAR(100),
role VARCHAR(50)
);
CREATE TABLE managers (
id INT,
name VARCHAR(100),
role VARCHAR(50)
);
INSERT INTO employees (id, name, role) VALUES (1, 'Alice', 'Developer'), (2, 'Bob', 'Designer');
INSERT INTO managers (id, name, role) VALUES (3, 'Charlie', 'Manager'), (4, 'David', 'Senior Manager');
我们希望合并这两个表中的所有人员信息:
SELECT id, name, role FROM employees
UNION
SELECT id, name, role FROM managers;
结果:
+----+---------+----------------+
| id | name | role |
+----+---------+----------------+
| 1 | Alice | Developer |
| 2 | Bob | Designer |
| 3 | Charlie | Manager |
| 4 | David | Senior Manager |
+----+---------+----------------+
示例 2:使用 UNION ALL 保留重复记录
假设 employees 表和 managers 表中有部分重复的记录,如果我们希望保留这些重复记录,可以使用 UNION ALL:
INSERT INTO employees (id, name, role) VALUES (3, 'Charlie', 'Manager');
SELECT id, name, role FROM employees
UNION ALL
SELECT id, name, role FROM managers;
结果:
+----+---------+----------------+
| id | name | role |
+----+---------+----------------+
| 1 | Alice | Developer |
| 2 | Bob | Designer |
| 3 | Charlie | Manager |
| 3 | Charlie | Manager |
| 4 | David | Senior Manager |
+----+---------+----------------+
示例 3:排序和限制结果集
使用 UNION 时,我们可以对结果集进行排序或限制记录数量。需要注意的是,ORDER BY 和 LIMIT 应该放在最后一个 SELECT 语句之后。
SELECT id, name, role FROM employees
UNION
SELECT id, name, role FROM managers
ORDER BY name DESC
LIMIT 3;
结果:
+----+---------+----------------+
| id | name | role |
+----+---------+----------------+
| 4 | David | Senior Manager |
| 3 | Charlie | Manager |
| 2 | Bob | Designer |
+----+---------+----------------+
UNION 的常见应用场景
合并不同时间段的数据
假设有一个日志表 logs,记录了不同时间段的日志信息,我们可以使用 UNION 将不同时间段的数据合并:
SELECT id, message, log_date FROM logs WHERE log_date < '2023-01-01'
UNION
SELECT id, message, log_date FROM logs WHERE log_date >= '2023-01-01';
从不同来源获取数据
在数据整合时,可能需要从多个表中获取数据并合并,例如从多个地区的销售数据表中获取数据:
SELECT product_id, sales_amount FROM sales_region1
UNION
SELECT product_id, sales_amount FROM sales_region2;
综合多个条件的查询结果
有时需要综合多个条件的查询结果,例如查询活跃用户和最近登录的用户:
SELECT user_id, username FROM users WHERE status = 'active'
UNION
SELECT user_id, username FROM users WHERE last_login > '2023-01-01';
结语
MySQL UNION 是一个强大的工具,可以帮助我们合并多个查询的结果,简化数据处理过程。在实际应用中,合理使用 UNION 和 UNION ALL,可以高效地整合和分析数据。希望本文能帮助你更好地理解和使用 MySQL UNION,提高数据库操作的效率。
Happy Querying!