在实际项目开发中,会经常联合查询结构相似的多张数据表,使用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,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。
- 子查询可以使用关联查询,where条件后不能包含order by和limit关键字,只可以放在查询的最后,是对整体数据的分页和排序
具体的写法如下:
-- 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)
order by id
limit 0,100
-- 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)
MyBatis联合查询union与union all用法区别

在实际项目开发中,使用MyBatis联合查询多张结构相似的数据表时,可使用union关键字。本文介绍了union和union all的区别与用法,两者都用于合并多个select语句结果,union会删除重复记录,union all返回所有记录且效率更高,同时还给出了使用时的注意事项。
2万+

被折叠的 条评论
为什么被折叠?



