当前位置: 首页 > news >正文

sql union 和 union all

UNIONUNION 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. 组合UNIONWHERE

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();

七、UNIONJOIN的区别

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

图示

text

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

八、总结

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

相关文章:

  • Agentic AI设计模式解析与实战应用
  • 离职日记: 离职第-N + 14 天
  • 预算有限也能穿出高级感?2026年义乌小预算西装定制全攻略 - 新闻快传
  • 工业小目标检测实战:螺丝螺母数据集的YOLOv6优化方案
  • 价格透明不踩坑,荆门能办寿宴的主题婚宴酒店推荐实力测评 - myqiye
  • AI代理系统工程中的反馈闭环设计实践
  • 智慧工厂AI安防系统架构与算法优化实践
  • 电缆接地故障的常见成因与高效定位方法解析 - HVHIPOT
  • 曲靖闲置黄金如何安全变现麒麟经开区六家本地黄金回收老店全面测评 - 不晚生活号
  • 短视频电商广告的AI视频创作工具,性价比最高的有哪些?2026年实测选型指南
  • 2026 聊城金银铂回收商家汇总|六家实体门店实地调研,上门回收避坑参考 - 不晚生活号
  • 互联网大厂Java求职面试:从Spring Boot到微服务的幽默对话
  • 强势认知手册
  • Qwen3.8-Max-Preview大模型在前端开发中的实战应用指南
  • 【微信私域流量变现新引擎】:扣子平台零代码搭建高转化机器人,72小时上线实战指南
  • ADS131M03高精度电能计量ADC:同步采样与硬件设计实战
  • MFC与GDI实战:从零构建LED数码管时钟的完整指南
  • HarmonyOS开发实战:小分享-Tabs 组件重构底部导航
  • 2026甄选:贵阳消防管道喷淋系统漏水检测公司服务解析 - 卓企推荐
  • 2026 虚高报价引流套路拆解,上海徐汇 “超高价收黄金” 骗局揭秘 - 融媒生活
  • 国内靠谱的中式屏风公司哪家可靠 - 速递信息
  • 互联网大厂 Java 求职者面试:技术栈与场景探讨
  • 百度网盘商业模式解析与高效使用指南
  • BQ25886电源管理芯片:NVDC架构与DPM技术深度解析与实战
  • 智能家居设备技术架构解析:从IoT系统设计到用户体验优化
  • 制造业AI应用实战:从数据采集到智能决策
  • APS与ERP中的MRP执行决策:关键考量因素
  • FastAPI 核心原理与基础教程:从零到精通的完整指南
  • AI论文降重技术解析与实战指南
  • 北京收表天花板✨出大牌名表只锁这家不踩坑! - 日常财经早知道