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)
相关推荐
悠仁さん3 分钟前
【C++】set map 使用
java·前端·c++
李纲明23 分钟前
WordPress 提示「建立数据库连接时出错」:先核 wp-config 与数据库服务,再查表损坏与磁盘配额
数据库·wordpress·devdiy
yuniko-n30 分钟前
【JUC】Thread 内存泄露
java
freejackman30 分钟前
【架构篇】双遍历 + 多栈协同:手撸 SQL 血缘引擎的架构思考
java·大数据·数据库·hive·sql·架构·spark
杨云龙UP33 分钟前
TDengine 社区版磁盘空间不足故障处理 SOP:历史日志清理、日志保留策略及数据保留 200 天
数据库·时序数据库·tdengine·tsdb·历史日志清理·trim database·logkeepdays
企业数字化笔记37 分钟前
业务单据怎样接入流程中心?启动条件、实例关联与失败回退
java·spring boot·mysql
betazhou43 分钟前
MySQL Oracle官方备份工具
数据库·mysql·oracle
挖掘狂人1 小时前
同一个端口能不能被两个程序同时监听?
java·后端·程序员
codigger1 小时前
同一个端口能不能被两个程序同时监听?
java·后端·程序员·编程
西索斯coding1 小时前
qwen3.8-max-0902 和 minimax-m3 改真实仓库差多少?2026 年 50 个缺陷复现实测框架
java·服务器·网络·ai