当前位置:网站首页>mysql的union和union all
mysql的union和union all
2022-08-03 09:16: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_skuWHERE msku = ‘21-BQLEDNL120W-BK’
UNION ALL
SELECT create_time,msku FROMe_msku_skuWHERE 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>
另外,如果系统中进行了分表,一定要保证各个表的字段顺序一致。特别是修改的时候。否则,如果使用 *汇总查询结果,肯定是会有问题的…亲身踩坑。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢

dflow入门2——Slices

MySQL1

STP和RSTP的BPDU报文中flag位 对比+分析

JMeter接口自动化发包与示例

【论文笔记】基于动作空间划分的MAXQ自动分层方法

Batch PNG format can be converted to JPG format

What exactly does a firmware engineer do?

二叉查找树的综合应用

What are pseudo-classes and pseudo-elements?The difference between pseudo-classes and pseudo-elements

Network LSTM both short-term and long-term memory
随机推荐
获取JDcookie的方法
长短期记忆网络 LSTM
多媒体数据处理实验3:图像特征提取与检索
MySQL-TCL语言-transaction control language事务控制语言
Redis集群概念与搭建
命令行加载特效 【cli-spinner.js】 实用教程
The window of the chosen data flow
AUC的两种计算方式
【快手面试】Word2vect生成的向量,为什么可以计算相似度,相似度有什么意义?
10 Convolutional Neural Networks for Deep Learning 2
mysql数据库配置性能调优
分区分表(一)
scala reduce、reduceLeft 、reduceRight 、fold、foldLeft 、foldRight
常见STP生成树调整命令
Cartesi 2022 年 7 月回顾
RSTP(端口角色+端口状态+工作机制)|||| 交换机接口分析
【无标题】
子查询和关联查询的区别
013-二叉树
牛客 - 鼠标的天选(字符串哈希)