mybatis的使用技巧8——联合查询union和union all的区别和用法

在实际项目开发中,会经常联合查询结构相似的多张数据表,使用union关键字就只需要一次sql操作,而无需执行多次查询并通过代码逻辑合并处理,减少了大量繁琐的操作,最重要的是还能通过可选的all关键字筛选重复的数据。

1.union和union all区别

  • 相同点:两者都用于把来自多个select语句的结果组合到一个结果集合中。
  • 不同点:当使用union时,mysql会把结果集中重复的记录删掉,而使用union all ,mysql会把所有的记录返回,且效率高于union。

最终的查询结果对比:

2.union和union all用法

重要的注意事项:

  • 第一个select语句中被使用的字段名称会被用于最终结果集的字段名称。
  • 存在union关键字的sql语句仅属于一条完整的sql,因此每一个select语句结束后都不能写标点符号。
  • 在多个 SELECT 语句中,对应的列应该具有相同的字段属性且同时字段的顺序要保持一致。
  • 如果子句中有order by,limit,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。

具体的写法如下:

sql 复制代码
-- union
select id,logo_sn sn
from card_info 
where del_flag = '0'
and id in (57,72)
union 
select helmet_id id,helmet_sn sn
from use_log
where del_flag = '0'
and helmet_id in (57,72)

-- union all
select id,logo_sn sn
from card_info 
where del_flag = '0'
and id in (57,72)
union all 
select helmet_id id,helmet_sn sn
from use_log
where del_flag = '0'
and helmet_id in (57,72)
相关推荐
MY_TEUCK5 小时前
【Java 后端】SpringBoot 登录认证与会话跟踪实战(JWT + Filter/Interceptor)
java·开发语言·spring boot
今天长肉了吗6 小时前
银行风控项目踩坑实录:指标跑了6小时,风险评分全挂了
java
随读手机6 小时前
多式联运信息交互平台完整方案(2026版)
java·ai·eclipse·云计算·区块链
阿波罗尼亚6 小时前
数据库序列(Sequence)
数据库
Junsir大斗师7 小时前
Nginx服务器代理Postgresql-16后端数据库
数据库·nginx
Je1lyfish7 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
许彰午7 小时前
03-二叉树——从递归遍历到非递归实现
java·算法
nj01287 小时前
Spring 循环依赖详解:三级缓存、早期引用、AOP 代理与懒加载
java·spring·缓存
野生技术架构师7 小时前
2026年最全Java面试题及答案汇总(建议收藏,面试前看这篇就够了)
java·开发语言·面试
一只叫煤球的猫8 小时前
ThreadForge 源码解读一:ThreadScope 如何把并发任务放进清晰边界?
java·面试·开源