使用 UNION ALL 注意事项
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 FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
UNION ALLSELECT create_time,msku FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK') t
综上:
union all 结果字段的顺序以 union all 前面的表字段顺序为准。union all 后面的表的数据会按照字段顺序依次附在后面,而不是按照字段名称匹配。
我们上面以*来表示顺序的不同,其实你写成不同顺序的字段结果一致。
3. union all 使用场景
sql 中的组合in,可用 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_infoWHERE rating_quantity <> 0AND country_code = #{item.***}AND asin = #{item.***}</foreach>ORDER BY *** DESC;</select>
另外,如果系统中进行了分表,一定要保证各个表的字段顺序一致。特别是修改的时候。否则,如果使用 *汇总查询结果,肯定是会有问题的…亲身踩坑。
欢迎评论及技术点、避坑分享!
转载于:https://www.cnblogs.com/buwuliao/p/11121352.html
使用 UNION ALL 注意事项相关推荐
- union用法注意事项
union 为组合查询 使用情况: 在一个查询中从不同的表中返回结构数据 对一个表执行多个查询,按一个查询返回数据 union(合并重复项),union(不合并重复项) 注意事项: union中的每个 ...
- 用UNION的注意事项
用UNION需要注意: 1.所有UNION的查询必须在SELECT 列表项中有相同的列数. 2.UNION查询的结果级的列标题仅从第一个查询处获得. 3.查询中对应列的数据类型必须隐式一致. 4.UN ...
- mysql中union学习总结
联合查询:把多个查询语句的查询结果结合在一起 主要用法:... union ... (去除重复) ...union all ... (不去重复) union查询注意事项: 必须有两条或以上的sel ...
- MySQL关键字union,limit,通用分页
关键字union,limit,通用分页 union合并查询结果集 案例:查询工作岗位是MANAGER和SALESMAN的员工 //写法一 select ename,job from emp where ...
- C语言struct和union
1.讨论struct C语言中的struct可以看作变量的集合 struct的问题:空结构体占用多大内存? 编程可知 在GCC编译器中,空结构体占用的大小大小为0,不占用任何内存. 在BCC编译器中, ...
- MySql(5)—— union、limit
union 合并查询结果集 案例:查询工作岗位是MANAGER和SALESMAN的员工? select ename,job from emp where job = 'MANAGER' or job ...
- union用法和enum用法
1 union用法 C语言中的union在语法上与struct相似. union只分配最大成员的空间,所有成员共享这个空间 2 union的注意事项 union的使用受系统大小端的影响 编程:判断系统 ...
- mysql与redis面试题
目录 1.主流的RDBMS软件?主流的Nosql软件? 2.MySQL的基本操作.服务部署: 3.主从同步的工作流程 4.列举Mysql常用的数据类型 5.mysql事物的4个特性是什么? 6.数据库 ...
- OCP 11G 051题库解析汇总链接
OCP 11G 051题库解析汇总链接 OCP 051题库 1 : OCP-1Z0-051 第1题 CTAS语句建表注意事项 2 : OCP-1Z0-051 第2题 视图的WITH CHEC ...
最新文章
- UWP 手绘视频创作工具技术分享系列 - 手绘视频导出
- 计算机设计策略,专家经验谈:Excel工作表的设计策略
- 东南大学c语言下学期期末考试题,东南大学C++期中考试题.doc
- 2020\Simulation_2\2.最多边数
- Android之解决底部4个TextView占比例大小不一致问题
- keras 自定义层input_从4个方面介绍Keras和Pytorch,并给你选择其中一个学习库的理由...
- 使用函数输出水仙花数
- spring整合dubbo实现简单分布式接口调用
- php 子进程_PHP 多进程入门
- 查看linux系统软件各种版本环境
- DVR服务器如何装系统,车载监控dvr如何配置服务器
- AcWing1088.旅行问题(单调队列DP)
- 求助!C++ 实践之引入外部头文件失败
- 虹软2.0 离线人脸识别 Android 开发 Demo
- 利用stringBuilder操作html文件
- CRUD生成器DBuilder设计与实现
- SpringBoot 错误:Field userService in com.lyh.Controller.UserController required a bean of...
- 读书笔记 - 《经济学通识》
- 物联网(IOT) 数据库需求和当前技术解析
- python学习-进阶
热门文章
- 用好blas和lapack库,dtrsm举例
- JoinQuant提供哪些数据 学习笔记(2)
- linux僵死进程是什么,linux进程僵死
- Unity接入Naudio实现多音频播放和多声道融合
- 获取4g信号强度android,Android6.0获取4G信号的信号强度(dbm)进行显示
- android studio 实现短信验证 登录
- MySQL讲义第 32 讲——select 查询之 select 语句的执行顺序
- 不要让ChatGPT成为你的智商税
- 霍纳法则——计算多项式的值
- 计算机格式为gpt怎么更改,电脑小白看过来 教你如何将mbr转换为gpt - 驱动管家...