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>

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

mysql的union和union all相关推荐

  1. mysql join union_MySQL中union和join语句使用区别的辨析教程

    union和join是需要联合多张表时常见的关联词,具体概念我就不说了,想知道上网查就行,因为我也记不准确. 先说差别:union对两张表的操作是合并数据条数,等于是纵向的,要求是两张表字段必须是相同 ...

  2. mysql all语法怎么用_MySQL UNION 与 UNION ALL 语法与用法

    MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为:SELECT column,... FROM table1 UNION [A ...

  3. Oracle/mysql联合查询union、union all

    若无特殊说明,oracle与mysql均适用 使用场景 union.union all关键字用户将两个select查询结果集合并成一个结果集,例如:一个旧系统使用a表,同样的信息但是新系统使用了b表, ...

  4. mysql union 与 union all 语法及用法

    1.mysql union 语法 mysql union 用于把来自多个select 语句的结果组合到一个结果集合中.语法为: select column,......from table1union ...

  5. Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Codi ...

  6. MySQL UNION 与 UNION ALL 语法与用法

    MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为: SELECT column,... FROM table1 UNION [ ...

  7. mysql内外三种连接_mysql之内连接,外连接(左连接,右连接),union,union all的区别...

    内连接,外连接,左连接,右连接,全连接 测试数据: CREATE TABLE `a_table` ( `a_id` int(11) DEFAULT NULL, `a_name` varchar(10) ...

  8. mysql union all 别名_mysql union 与 union all 语法及用法

    1.mysql   union  语法 mysql   union 用于把来自多个select  语句的结果组合到一个结果集合中.语法为: select  column,......from tabl ...

  9. mysql union 别名报错_MySQL中UNION和UNION ALL的使用

    在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. MySQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后 ...

  10. mysql union 不同字段_mysql中union和union all的区别和注意点

    mysql中union和union all的区别和注意点 昨天有个功能要实现排行效果,而且是随机按照某些字段的总值,但是第一个又要不一样,因为第一个人给了钱,所以要排第一. 打个比方吧,表(useri ...

最新文章

  1. python下载教程pdf-Python教程PDF合集下载
  2. 华菱重卡仪表指示说明_仪表装置11种常见故障的解决方法
  3. POJ 3101 Astronomy (角速度啊,高中物理啊。。。T_T)
  4. 命令折叠代码的所有部分?
  5. 利用Pin分析程序的动态行为特征
  6. [OpenJDK]native.java.lang.UNIXProcess_md.c
  7. mysql创建触发器怎么保存_如何创建使用mysql触发器?
  8. IIS部署添加网站发布网站
  9. unity自动生成敌人_敌人的自动生成 - Unity脚本编程 — Project 2:慕课英雄 MOOC HERO(第三人称射击简易版) | Coursera...
  10. B - Relatively Prime Graph -CodeForces - 1009D-csdn博客
  11. “任务管理器已被管理员禁用”如何解除?
  12. Odoo报表的report标签和报表格式定义
  13. 深入理解Java虚拟机——魔数与Class文件的版本
  14. 微信公共号分享链接配置
  15. 最新vue实战视屏 vue2.x thinkPHP5.0后台 nodejs+mong0DB
  16. number of items to replace is not a multiple of replacement length
  17. java 之 xml 解析工具
  18. iOS Keychain(钥匙串)原理及使用
  19. Spring集成JMS入门
  20. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

热门文章

  1. html中如何找到成对标签,操作html标签之找到标签
  2. 【软考系统架构设计师】知识点必知必会系列汇总
  3. 【云原生之Docker实战】在Docker环境部署Answer问答平台
  4. mysql source 忽略错误_mysql导入忽略错误
  5. svn服务器设置忽略文件夹,SVNignore忽略文件及目录 - 米扑博客
  6. 授之以渔-运维平台发布模块四(回滚篇)
  7. R语言实现LASSO回归
  8. 口红会染唇是什么意思_唇釉口红染唇液区别_染唇液和唇釉的区别及哪个好
  9. 防火墙是什么?硬件防火墙和软件防火墙的区别
  10. springboot接受json数组