在 MySQL 中使用 Union

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【8月更文挑战第11天】

在 MySQL 中,UNION 是一个重要的 SQL 操作符,用于将两个或多个 SELECT 查询的结果集合并为一个单一的结果集。UNION 操作符在数据汇总和分析中非常有用,能够帮助用户有效地整合来自不同来源的数据。本文将详细介绍 UNION 的使用方法,包括基本语法、示例操作、应用场景及注意事项。

1. 基本概念

1.1 UNION 语法

UNION 用于将两个或多个 SELECT 查询的结果合并成一个结果集。其基本语法如下:

SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
  • SELECT column1, column2, ... FROM table1:第一个查询,选择要合并的列。
  • UNION:操作符,用于将第一个查询的结果与第二个查询的结果合并。
  • SELECT column1, column2, ... FROM table2:第二个查询,与第一个查询的结果合并。

注意UNION 只返回唯一的记录。如果需要包括所有记录(包括重复的记录),可以使用 UNION ALL

2. 示例操作

2.1 基本示例

假设我们有两个表:employeescontractors,我们希望将这两个表中的所有员工和承包商的姓名合并在一起。

创建表的示例:

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE contractors (
    contractor_id INT PRIMARY KEY,
    name VARCHAR(100)
);

插入数据:

INSERT INTO employees (employee_id, name) VALUES
(1, 'John Doe'),
(2, 'Jane Smith');

INSERT INTO contractors (contractor_id, name) VALUES
(3, 'Emily Davis'),
(4, 'Michael Brown');

使用 UNION 合并两个表的姓名:

SELECT name
FROM employees
UNION
SELECT name
FROM contractors;

结果:

name
------
John Doe
Jane Smith
Emily Davis
Michael Brown

这个查询将两个表中的姓名合并为一个结果集,并自动去除了重复的记录。

2.2 使用 UNION ALL

如果我们希望包括所有记录(包括重复的记录),可以使用 UNION ALL

使用 UNION ALL 合并两个表的姓名:

SELECT name
FROM employees
UNION ALL
SELECT name
FROM contractors;

结果:

name
------
John Doe
Jane Smith
Emily Davis
Michael Brown

在这个例子中,由于两个表中的姓名是唯一的,结果与 UNION 相同,但 UNION ALL 会保留所有重复的记录。如果两个表中存在重复的姓名,UNION ALL 将返回所有这些记录。

3. 多个查询的合并

UNION 还可以用于合并多个查询的结果。例如,假设我们有三个表:sales_2023sales_2024sales_2025,我们希望将这三年的销售记录合并到一起。

创建表的示例:

CREATE TABLE sales_2023 (
    sale_id INT,
    amount DECIMAL
);

CREATE TABLE sales_2024 (
    sale_id INT,
    amount DECIMAL
);

CREATE TABLE sales_2025 (
    sale_id INT,
    amount DECIMAL
);

插入数据:

INSERT INTO sales_2023 (sale_id, amount) VALUES
(1, 100.00),
(2, 150.00);

INSERT INTO sales_2024 (sale_id, amount) VALUES
(3, 200.00),
(4, 250.00);

INSERT INTO sales_2025 (sale_id, amount) VALUES
(5, 300.00),
(6, 350.00);

使用 UNION 合并三年的销售记录:

SELECT sale_id, amount
FROM sales_2023
UNION
SELECT sale_id, amount
FROM sales_2024
UNION
SELECT sale_id, amount
FROM sales_2025;

结果:

sale_id | amount
--------+--------
1       | 100.00
2       | 150.00
3       | 200.00
4       | 250.00
5       | 300.00
6       | 350.00

4. 常见应用场景

4.1 数据汇总

UNION 可用于汇总来自多个数据源的数据。例如,汇总来自不同地区的销售数据。

示例:

SELECT region, sales_amount
FROM sales_north
UNION
SELECT region, sales_amount
FROM sales_south
UNION
SELECT region, sales_amount
FROM sales_east
UNION
SELECT region, sales_amount
FROM sales_west;

4.2 数据整合

在合并来自多个表的数据时,UNION 可用于将数据整合为一个结果集。例如,合并不同部门的员工记录。

示例:

SELECT employee_id, name
FROM department_hr
UNION
SELECT employee_id, name
FROM department_it
UNION
SELECT employee_id, name
FROM department_sales;

5. 注意事项

5.1 列匹配

所有参与 UNION 的查询必须具有相同数量的列,并且这些列的数据类型必须兼容。如果列数或数据类型不匹配,查询将失败。

示例:

-- 错误的示例:列数不匹配
SELECT name
FROM employees
UNION
SELECT name, position  -- 列数不匹配
FROM contractors;

5.2 性能考虑

UNION 可能会影响查询性能,特别是在处理大量数据时。可以考虑优化查询,例如通过创建索引来提高性能。UNION ALL 通常比 UNION 更高效,因为它不需要去重。

优化建议:

  • 创建索引:在参与 UNION 的列上创建索引可以提高查询性能。
  • 数据预处理:通过数据预处理或临时表减少数据集的大小。

5.3 排序结果

如果需要对 UNION 结果进行排序,可以在 UNION 操作后使用 ORDER BY

示例:

SELECT name
FROM employees
UNION
SELECT name
FROM contractors
ORDER BY name;

6. 总结

UNION 是 MySQL 中一个强大的 SQL 操作符,用于将两个或多个查询结果集合并为一个结果集。通过使用 UNION,可以灵活地汇总和处理来自不同数据源的数据。掌握 UNION 的使用方法,有助于在处理复杂查询和数据整合时提高效率。在使用 UNION 时,要注意列匹配、性能优化和结果排序等细节,以确保查询的准确性和性能。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 关系型数据库 MySQL
总结vue3 的一些知识点:MySQL UNION 操作符
总结vue3 的一些知识点:MySQL UNION 操作符
|
关系型数据库 MySQL
Mysql union 联合查询
Mysql union 联合查询
65 0
|
SQL 前端开发 Oracle
mysql合并查询(多张表) union 和 union all
简介 小序 :今天写首页动态业务的时候,用到了两张表,还需要分页查询,刚开始以为需要关联查询,后来发现关联的话不会放到一个实体,然后我就上网找方法,然后发现了一个我没学过的sql语句union,union all,卧槽 还是得好好学习啊,前端我想学,mysql我想学,真的时间不够用啊,还得给学弟学妹拍趣味编程课看的视频,真的是烦啊! 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
966 0
mysql合并查询(多张表) union 和 union all
|
存储 SQL 关系型数据库
MySQL请求使用union查询结果为空
MySQL请求使用union查询结果为空
|
3月前
|
关系型数据库 MySQL 数据库
MySQL:union all与union区别详解
MySQL:union all与union区别详解
|
5月前
|
关系型数据库 MySQL
MySQL 的 union 和union all 的区别
【5月更文挑战第4天】MySQL 的 union 和union all 的区别
128 7
|
5月前
|
SQL 关系型数据库 MySQL
MySQL第三战:CRUD,函数1以及union&union all
MySQL第三战:CRUD,函数1以及union&union all
|
5月前
|
关系型数据库 MySQL
MySQL union和union all的用法详解和区别
MySQL union和union all的用法详解和区别
221 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
238 0
|
5月前
|
关系型数据库 MySQL 数据库
MySQL UNION 操作符
【1月更文挑战第6天】MySQL 使用讲解 第06期