1. sql中 union 和 union all 的用法

如果我们需要将两个 select 语句的结果作为一个整体显示出来,我们就需要用到 union 或者 union all 关键字。union (或称为联合)的作用是将多个结果合并在一起显示出来。

unionunion 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 &lt;&gt; 0AND country_code = #{item.***}AND asin = #{item.***}</foreach>ORDER BY *** DESC;</select>

另外,如果系统中进行了分表,一定要保证各个表的字段顺序一致。特别是修改的时候。否则,如果使用 *汇总查询结果,肯定是会有问题的…亲身踩坑。

欢迎评论及技术点、避坑分享!

转载于:https://www.cnblogs.com/buwuliao/p/11121352.html

使用 UNION ALL 注意事项相关推荐

  1. union用法注意事项

    union 为组合查询 使用情况: 在一个查询中从不同的表中返回结构数据 对一个表执行多个查询,按一个查询返回数据 union(合并重复项),union(不合并重复项) 注意事项: union中的每个 ...

  2. 用UNION的注意事项

    用UNION需要注意: 1.所有UNION的查询必须在SELECT 列表项中有相同的列数. 2.UNION查询的结果级的列标题仅从第一个查询处获得. 3.查询中对应列的数据类型必须隐式一致. 4.UN ...

  3. mysql中union学习总结

    联合查询:把多个查询语句的查询结果结合在一起 主要用法:... union ... (去除重复)  ...union all ... (不去重复) union查询注意事项:  必须有两条或以上的sel ...

  4. MySQL关键字union,limit,通用分页

    关键字union,limit,通用分页 union合并查询结果集 案例:查询工作岗位是MANAGER和SALESMAN的员工 //写法一 select ename,job from emp where ...

  5. C语言struct和union

    1.讨论struct C语言中的struct可以看作变量的集合 struct的问题:空结构体占用多大内存? 编程可知 在GCC编译器中,空结构体占用的大小大小为0,不占用任何内存. 在BCC编译器中, ...

  6. MySql(5)—— union、limit

    union 合并查询结果集 案例:查询工作岗位是MANAGER和SALESMAN的员工? select ename,job from emp where job = 'MANAGER' or job ...

  7. union用法和enum用法

    1 union用法 C语言中的union在语法上与struct相似. union只分配最大成员的空间,所有成员共享这个空间 2 union的注意事项 union的使用受系统大小端的影响 编程:判断系统 ...

  8. mysql与redis面试题

    目录 1.主流的RDBMS软件?主流的Nosql软件? 2.MySQL的基本操作.服务部署: 3.主从同步的工作流程 4.列举Mysql常用的数据类型 5.mysql事物的4个特性是什么? 6.数据库 ...

  9. OCP 11G 051题库解析汇总链接

    OCP 11G 051题库解析汇总链接   OCP 051题库 1 :  OCP-1Z0-051 第1题 CTAS语句建表注意事项  2 :  OCP-1Z0-051 第2题 视图的WITH CHEC ...

最新文章

  1. UWP 手绘视频创作工具技术分享系列 - 手绘视频导出
  2. 计算机设计策略,专家经验谈:Excel工作表的设计策略
  3. 东南大学c语言下学期期末考试题,东南大学C++期中考试题.doc
  4. 2020\Simulation_2\2.最多边数
  5. Android之解决底部4个TextView占比例大小不一致问题
  6. keras 自定义层input_从4个方面介绍Keras和Pytorch,并给你选择其中一个学习库的理由...
  7. 使用函数输出水仙花数
  8. spring整合dubbo实现简单分布式接口调用
  9. php 子进程_PHP 多进程入门
  10. 查看linux系统软件各种版本环境
  11. DVR服务器如何装系统,车载监控dvr如何配置服务器
  12. AcWing1088.旅行问题(单调队列DP)
  13. 求助!C++ 实践之引入外部头文件失败
  14. 虹软2.0 离线人脸识别 Android 开发 Demo
  15. 利用stringBuilder操作html文件
  16. CRUD生成器DBuilder设计与实现
  17. SpringBoot 错误:Field userService in com.lyh.Controller.UserController required a bean of...
  18. 读书笔记 - 《经济学通识》
  19. 物联网(IOT) 数据库需求和当前技术解析
  20. python学习-进阶

热门文章

  1. 用好blas和lapack库,dtrsm举例
  2. JoinQuant提供哪些数据 学习笔记(2)
  3. linux僵死进程是什么,linux进程僵死
  4. Unity接入Naudio实现多音频播放和多声道融合
  5. 获取4g信号强度android,Android6.0获取4G信号的信号强度(dbm)进行显示
  6. android studio 实现短信验证 登录
  7. MySQL讲义第 32 讲——select 查询之 select 语句的执行顺序
  8. 不要让ChatGPT成为你的智商税
  9. 霍纳法则——计算多项式的值
  10. 计算机格式为gpt怎么更改,电脑小白看过来 教你如何将mbr转换为gpt - 驱动管家...