游乐游手机版
首页/数据库/文章详情

MySQL UNION操作符用法详解与实例

时间:2026-07-06 07:05
UNION用于合并多个SELECT查询结果,默认去重;UNIONALL保留重复行且性能更优。使用要求各SELECT列数相同、对应列数据类型兼容,结果列名取第一个查询。ORDERBY对整体结果排序,与JOIN的区别在于UNION上下拼接、JOIN左右关联。

在数据库查询中,UNION 是一个极为实用的关键字,其核心功能是将多个 SELECT 查询的结果集合并输出。

MySQL中UNION的用法详解

但在实际开发中,许多开发者容易混淆 UNION 与 JOIN 的区别。其实一句话就能概括:

  • UNION 将结果纵向拼接
  • JOIN 则将表数据横向关联

接下来,我们将逐一深入解析 UNION 的详细用法。

一、UNION 是什么?基本概念与作用

UNION 专门用于合并两个及以上的 SELECT 语句所返回的查询结果。其基本语法非常直观:

SELECT 列1, 列2 FROM 表AUNIONSELECT 列1, 列2 FROM 表B;

举例说明:

SELECT name, phone FROM customersUNIONSELECT name, phone FROM suppliers;

这条 SQL 的意图很明确——先从 customers 表提取 name 和 phone,再从 suppliers 表取出相同字段,最后将两批结果合并成一个完整数据集返回。

二、UNION 默认会去重(UNION DISTINCT)

MySQL 中的 UNION 默认会帮助用户去除重复的数据行。

例如:

SELECT 1 AS idUNIONSELECT 1 AS id;

查询结果如下:

id--1

虽然两次查询都返回了 1,但最终结果仅保留一行。换句话说,UNION 等价于 UNION DISTINCT,去重是其默认行为。

三、UNION ALL 不会去重,性能更优

如果需要将所有查询结果原封不动地保留,包括重复数据,则应使用 UNION ALL。

再看一个实例:

SELECT 1 AS idUNION ALLSELECT 1 AS id;

查询结果:

id

--

这次两条相同的 1 全部显示出来。

从实战角度考量,如果你能确定数据本身不会重复,或者业务上允许重复,建议优先选择 UNION ALL。原因很简单——去重操作存在性能开销,UNION ALL 跳过这一步骤,执行效率通常比 UNION 高出一截。

四、UNION 的使用要求与限制

使用 UNION 时,有几项基本规则必须遵守。

1. 每个 SELECT 查询的列数必须相同

正确写法:

SELECT id, name FROM usersUNIONSELECT id, name FROM admins;

错误写法:

SELECT id, name FROM usersUNIONSELECT id FROM admins;

第一种返回两列,第二种仅返回一列,列数不一致,MySQL 直接拒绝执行。

2. 对应列的数据类型应当兼容

看一下这个示例:

SELECT id, name FROM usersUNIONSELECT id, title FROM articles;

语法上或许能通过,因为两个查询都返回两列。但从业务语义来看,第二列一边是用户名 name,一边是文章标题 title,含义完全不匹配。因此,使用 UNION 时不仅要确保列数对齐,对应列的数据含义也应保持一致。

3. 最终结果的列名取第一个 SELECT 的列名

例如:

SELECT id AS user_id, name AS user_name FROM usersUNIONSELECT id AS admin_id, name AS admin_name FROM admins;

最终返回的列名是:

user_id | user_name

而不是:

admin_id | admin_name

换言之,UNION 结果集中的字段名完全由第一个 SELECT 决定。

五、UNION 中 ORDER BY 和 LIMIT 的用法

假如需要对合并后的最终结果进行排序,直接将 ORDER BY 写在最后即可。

示例:

SELECT id, name FROM usersUNION ALLSELECT id, name FROM adminsORDER BY id DESC;

这里的 ORDER BY id DESC 是对两个查询合并后的整体结果统一排序。

如果需求更为复杂——比如每个查询内部先排序或限定行数,则需要借助括号:

(SELECT id, name FROM users ORDER BY id DESC LIMIT 10)UNION ALL(SELECT id, name FROM admins ORDER BY id DESC LIMIT 10)ORDER BY id DESC;

这条 SQL 的逻辑非常清晰:

  1. 先从 users 表取出 id 最大的 10 条记录;
  2. 再从 admins 表取出 id 最大的 10 条记录;
  3. 最后将两部分结果合并,并按 id 降序整体排列。

六、UNION 的常见使用场景(分表合并)

假设现在有两张学生表:

students_2024students_2025

你想将两个年份的学生数据合并在一起查询,可以这样写:

SELECT id, name, '2024' AS year FROM students_2024UNION ALLSELECT id, name, '2025' AS year FROM students_2025;

这里添加了固定字段,分别标注 '2024' AS year 和 '2025' AS year。这样每一行数据来自哪一年,一目了然。

结果大致如下:

id | name | year

---|------|------

1 | 张三 | 2024

2 | 李四 | 2024

1 | 王五 | 2025

2 | 赵六 | 2025

这种写法在分表查询、历史数据合并、报表统计等场景中十分常见。

七、UNION 与 JOIN 的区别详解

许多刚接触 SQL 的新手,容易将 UNION 和 JOIN 混淆。两者其实很好区分。

UNION:纵向合并结果

SELECT name FROM customersUNIONSELECT name FROM suppliers;

可以理解为:

customers 查询结果

+

suppliers 查询结果

它只是简单地将多批结果堆叠在一起,生成更多行。

JOIN:横向关联字段

SELECT orders.id, users.nameFROM ordersJOIN users ON orders.user_id = users.id;

可以理解为:

订单信息 + 用户信息

它是根据关联条件,将多张表的数据拼接到同一行中。

一句话总结:UNION 是纵向拼接,JOIN 是横向关联。

八、UNION 与 UNION ALL 如何选择?性能与去重

这个选择并不复杂:

需要去重时选用 UNION:

UNION

不需要去重时选用 UNION ALL:

UNION ALL

实际项目中,UNION ALL 的使用频率往往更高。因为它省去了去重步骤,性能更优。只有在系统确实需要过滤重复数据时,才会用到 UNION。

九、总结:UNION 核心要点速记

这篇文章全面梳理了 MySQL 中 UNION 的用法。核心要点如下:

  1. UNION 用于合并多个 SELECT 查询结果;
  2. UNION 默认会去除重复行;
  3. UNION ALL 不会去重,性能通常更优;
  4. 多个 SELECT 的列数必须一致;
  5. 对应列的数据类型最好保持兼容;
  6. 最终结果的列名由第一个 SELECT 决定;
  7. ORDER BY 写在最后时,是对整体结果排序;
  8. UNION 是纵向拼接,JOIN 是横向关联。

一句话来记忆:

UNION 合并结果并去重,UNION ALL 合并结果不去重;列数要一致,类型要兼容,字段名看第一个 SELECT。

来源:https://www.jb51.net/database/366718m94.htm
上一篇SQL先过滤后连接比先连接后过滤更高效的原因 下一篇SQL中FILTER子句配合窗口函数条件过滤计算方法详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis是什么:核心特性、架构与应用场景解析
数据库 · 2026-09-01

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

Windows 安装 MongoDB 完整图文教程
数据库 · 2026-09-01

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动
数据库 · 2026-09-01

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

MacOS安装MongoDB完整教程
数据库 · 2026-09-01

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

Ubuntu系统安装与配置Redis完整指南
数据库 · 2026-09-01

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。