尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

sql union 和 union all

sql union 和 union all
📅 发布时间:2026/7/24 14:37:09

UNION和UNION ALL是 SQL 中用于合并两个或多个查询结果集的操作符。它们的基本作用相同,但在去重和性能上有关键区别。


一、核心区别

特性UNIONUNION ALL
去重✅ 会去除重复行❌ 保留所有行(包括重复)
性能较慢(需要排序去重)更快(直接合并)
使用场景需要唯一结果集不关心重复 / 已知不会重复

记住一句话:UNION ALL是直接拼接,UNION是拼接后再去重。


二、示例说明

假设有两张表:

表 A:

text

id | name ----|------ 1 | 张三 2 | 李四

表 B:

text

id | name ----|------ 2 | 李四 3 | 王五

UNION ALL(保留重复)

sql

SELECT id, name FROM A UNION ALL SELECT id, name FROM B;

结果:

text

1 | 张三 2 | 李四 2 | 李四 ← 重复保留 3 | 王五

UNION(去重)

sql

SELECT id, name FROM A UNION SELECT id, name FROM B;

结果:

text

1 | 张三 2 | 李四 3 | 王五

三、使用限制和注意事项

规则说明
列数必须相同所有查询的SELECT列数必须一致
列类型必须兼容对应列的数据类型必须能隐式转换
列名以第一个查询为准最终结果集的列名由第一个SELECT决定
ORDER BY只能放在最后不能对单个子查询排序,只能对整个结果集排序
LIMIT只能放在最后同上

四、常见写法

1. 合并查询结果

sql

SELECT id, name FROM table_a UNION ALL SELECT id, name FROM table_b ORDER BY id DESC; -- 对整个结果集排序

2. 合并后分页

sql

SELECT id, name FROM ( SELECT id, name FROM table_a UNION ALL SELECT id, name FROM table_b ) t LIMIT 10 OFFSET 0;

3. 组合UNION和WHERE

sql

SELECT id, name FROM table_a WHERE status = 1 UNION ALL SELECT id, name FROM table_b WHERE status = 1;

五、性能对比

操作执行计划
UNION ALL直接 Append(追加)结果集,最快
UNIONAppend + Sort + Unique(排序去重),多消耗 CPU 和内存

建议:如果确认数据不会重复,或者业务上允许重复,尽量使用UNION ALL。


六、在 MyBatis-Plus / JPA 中使用

MyBatis-Plus(XML)

xml

<select id="unionExample" resultType="com.seazon.cloud.entity.Driver"> SELECT id, name FROM driver_info UNION ALL SELECT id, name FROM driver_history </select>

JPA(原生 SQL)

java

@Query(value = "SELECT id, name FROM driver_info " + "UNION ALL " + "SELECT id, name FROM driver_history", nativeQuery = true) List<Object[]> unionQuery();

七、UNION与JOIN的区别

对比UNIONJOIN
作用上下合并行左右关联列
结果行数增加列数增加
关联不需要关联条件需要ON条件

图示:

text

UNION: JOIN: 表A 行 表A 列 表B 列 表A 行 → 表A 行 表B 行 ← 横向扩展 表B 行 ↑ 表A 行 表B 行 表B 行 纵向扩展

八、总结

需求推荐使用
结果集不允许重复UNION
结果集允许重复 / 已知无重复UNION ALL(优先)
需要排序ORDER BY放在最后
需要分页先UNION再套一层LIMIT

相关新闻

  • Agentic AI设计模式解析与实战应用
  • 离职日记: 离职第-N + 14 天
  • 曲靖闲置黄金如何安全变现麒麟经开区六家本地黄金回收老店全面测评 - 不晚生活号

最新新闻

  • CoVe方法:大模型自我纠错的技术解析与实践
  • 基于SimpleLink MCU的MSP430 UART Bootloader实现与远程升级方案
  • MSPM0 G系列Flash控制器寄存器深度解析与实战编程指南
  • 2026最新|江门市空调维修师傅联系方式|江门市|各片区家电维修师傅通讯录-欧米到家(全网高可信度顶尖) - 欧米到家
  • 大模型能力≠Agent能力:国产工具的功能差距在哪?
  • Claude AI原生应用:长文本处理与安全合规技术解析

日新闻

  • 武汉卡地亚LOVE钻戒与钻石项链回收变现攻略|多家门店行情参考 - 大牌深度测评
  • 2026年无锡地区健康管理如何考量?四家机构业务体系概览
  • 2026图片去水印软件哪个好用 手机电脑免费工具盘点 - 免费软件工具方法教程

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号