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)
相关推荐
Trouvaille ~3 分钟前
【Redis篇】Redis 主从复制:数据同步的原理与实现
数据库·redis·缓存·中间件·高可用·主从复制·后端开发
真实的菜21 分钟前
Redis 从入门到精通(五):哨兵模式(Sentinel)—— 自动故障转移的完整原理与实战
数据库·redis·sentinel
小江的记录本29 分钟前
【Spring全家桶】Spring Cloud 2023.0.x:微服务核心理论、CAP/BASE定理(附《思维导图》+《面试高频考点清单》)
java·spring boot·后端·spring·spring cloud·微服务·面试
Solis程序员32 分钟前
缓存三剑客预防策略
java·spring·缓存
唔6637 分钟前
(二)补充完整的数据库、中间件、MQTT、JAR后台和Web前端的部署脚本,全部一键自动化。
数据库·中间件·jar
六月雨滴39 分钟前
Oracle 内存优化
数据库·oracle
我登哥MVP44 分钟前
Spring Boot 从“会用”到“精通”:Model-Map原理
java·spring boot·后端·spring·servlet·maven·mybatis
学代码的真由酱44 分钟前
MySQL数据库进阶-数据库设计实践-Java
数据库·mysql·数据库设计
程序猿乐锅1 小时前
【苍穹外卖|Day02】后台接口自测闭环:Token、DTO 与 yml 配置
java·开发语言