首页 > 数据库 >MySQL UNION用法详解

MySQL UNION用法详解

来源:互联网 2026-07-04 08:50:00

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

数据库查询中,UNION 是一个常用的关键字,其核心功能是将多个 SELECT 查询的结果集合并在一起

MySQL UNION用法详解

长期稳定更新的攒劲资源: >>>点此立即查看<<<

在实际应用中,一个容易让人混淆的概念是 UNIONJOIN 的区别。简单概括:

  • 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 表取出 namephone,再从 suppliers 表取出相同字段,然后将两组结果合并返回。

二、UNION 默认去重

在 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 的区别

许多初学者容易混淆 UNIONJOIN,两者其实很容易区分。

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

九、总结

本文梳理了 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。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。