mysql中union和union all的使用

前言

在工作中遇到需要将两个模块的数据整合成一块数据分页返回给前段,本来想着分别查询然后将两部分数据后台处理放到一个新的对象返回,后来发现可以使用mysql中的union all将数据直接查询出来,所以通过查询资料以及具体使用情况整理了下union和union all的使用心得.

1.union和union all的用法

如果我们需要将两个 select 语句的结果作为一个整体显示出来,我们就需要用到 union 或者 union all 关键字。union (或称为联合)的作用是将多个结果合并在一起显示出来。注意的是两个select语句的查询字段要保持一致。
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'

结果:
mysql中union和union all的使用_第1张图片

  • 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'

结果:
mysql中union和union all的使用_第2张图片

2.注意事项

  1. UNION 和 UNION ALL 内部的 SELECT 语句必须拥有相同数量的列
    mysql中union和union all的使用_第3张图片
  2. 每条 SELECT 语句中列的顺序必须相同
    先来说下,如果顺序不同,会是什么结果?
    答:结果字段的顺序以union all 前面的表字段顺序为准。
    union all 后面的表的数据会按照顺序依次附在后面。注意:按照字段顺序匹配,而不是按照字段名称匹配。
    sql如下:顺序对结果的影响
SELECT * 
FROM(
	SELECT msku,create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
UNION ALL
	SELECT create_time,msku FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK') t

mysql中union和union all的使用_第4张图片
综上:
union all 结果字段的顺序以 union all 前面的表字段顺序为准。union all 后面的表的数据会按照字段顺序依次附在后面,而不是按照字段名称匹配。

我们上面以*来表示顺序的不同,其实你写成不同顺序的字段结果一致。
mysql中union和union all的使用_第5张图片

你可能感兴趣的:(mysql,数据库,sql)