当前位置:网站首页>mysql的union和union all
mysql的union和union all
2022-07-29 15:10:00 【额 无语】
1. sql中 union 和 union all 的用法
如果我们需要将两个 select 语句的结果作为一个整体显示出来,我们就需要用到 union 或者 union all 关键字。union (或称为联合)的作用是将多个结果合并在一起显示出来。
union 和 union all 的区别是,union 会自动压缩多个结果集合中的重复结果,而 union all 则将所有的结果全部显示出来,不管是不是重复。
union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;union 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表 union。
如下sql:
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
UNION
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
结果:
union all:对两个结果集进行并集操作,包括重复行,不进行排序; 如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
如下sql:
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
UNION ALL
SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
结果:
2. 注意事项
2.1、UNION 和 UNION ALL 内部的 SELECT 语句必须拥有相同数量的列
2.2、每条 SELECT 语句中列的顺序必须相同
先来说下,如果顺序不同,会是什么结果?
答:结果字段的顺序以union all 前面的表字段顺序为准。
union all 后面的表的数据会按照顺序依次附在后面。注意:按照字段顺序匹配,而不是按照字段名称匹配。sql如下:顺序对结果的影响
SELECT *
FROM(
SELECT msku,create_time FROMe_msku_sku
WHERE msku = ‘21-BQLEDNL120W-BK’
UNION ALL
SELECT create_time,msku FROMe_msku_sku
WHERE msku = ‘21-BQLEDNL120W-BK’) t
综上:
union all 结果字段的顺序以 union all 前面的表字段顺序为准。union all 后面的表的数据会按照字段顺序依次附在后面,而不是按照字段名称匹配。
我们上面以*来表示顺序的不同,其实你写成不同顺序的字段结果一致。
3. union all 使用场景
修改前:组合in sql
SELECT ***, ***, ***, ***, ***
FROM e_rating_info
WHERE rating_quantity <> 0 AND (***, ***)
IN (('***', '***'), ('***', '***'),
('***', '***'), ('***', '***'),
('***', '***'), ('***', '***'),
('***', '***'), ('***', '***'),
('***', '***'), ('***', '***'))
ORDER BY *** DESC
修改后:UNION ALL sql
<select id="queryRatingInfo" resultType="***">
<foreach collection="ratingList" item="item" index="index" open="" separator="UNION ALL" close="">
SELECT ***, ***, ***, ***, ***
FROM e_rating_info
WHERE rating_quantity <> 0
AND country_code = #{item.***}
AND asin = #{item.***}
</foreach>
ORDER BY *** DESC;
</select>
另外,如果系统中进行了分表,一定要保证各个表的字段顺序一致。特别是修改的时候。否则,如果使用 *汇总查询结果,肯定是会有问题的…亲身踩坑。
边栏推荐
猜你喜欢
Why does APP use the JSON protocol to interact with the server: serialization related knowledge
手摸手实现Canal如何接入MySQL实现数据写操作监听
【GoLang】Sync lock
Shell脚本编程-运算
AOP implementation enterprise API access interface monitoring (via Google Guava cache data)
Google Play policy update | in July 2022
LeetCode·每日一题·593.有效的正方形·数学
bit field in c language
BGP联邦实验
CAN报文:数据帧详解
随机推荐
qt vs2015中无法打开源文件“QtWidgets”的解决方案
【LeetCode】217. 存在重复元素
How to get local json
c语言之位域
gateway基本使用
RestTemplate下载文件的另一种方式
The future trend of the conversation
Flink SQL Hudi 实战
3C数码行业供应商管理方案——与供应商结为“成长共同体”
【微服务】(十六)—— 分布式事务Seata
进入中国27年,又一美妆巨头要离场
人脸关键点预测以及归一化
AOP implementation enterprise API access interface monitoring (via Google Guava cache data)
这个保护数据隐私的赛道,人人都想插一脚,互联网大厂挤破头,连甲方都下场自研了...
数据库管控平台-awr报告采集(mysql/oracle)
数据挖掘场景-发票虚开
从通信延伸到全行业,亚信科技AntDB 7.0蓄势待发
大模型轻量化实践路径
NDK 系列(5):JNI 从入门到实践,爆肝万字详解!
药物研发---信息部门考核办法