【MySQL】探索 MySQL UNION:合并查询结果的利器


我已经从你的 全世界路过
像一颗流星 划过命运 的天空
很多话忍住了 不能说出口
珍藏在 我的心中
只留下一些回忆
                     🎵 牛奶咖啡《从你的全世界路过》


在数据库操作中,有时候我们需要将多个查询的结果合并为一个结果集。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!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值