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 ALL
SELECT 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
另外,如果系统中进行了分表,一定要保证各个表的字段顺序一致。特别是修改的时候。否则,如果使用 *汇总查询结果,肯定是会有问题的…亲身踩坑。
补充:mysql中union和union all的区分
一、区分1:取结果的交集
1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默许规则的排序;
2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不论会不会重复;
二、区分2:获得结果后的操作
1、union: 会对获得的结果进行排序操作
2、union all: 不会对获得的结果进行排序操作
三、区分3:
1、union看到结果中ID=3的只有一条
select * from student2 where id < 4
union
select * from student2 where id > 2 and id < 6
2、union all 结果中ID=3的结果有两个
select * from student2 where id < 4
union all
select * from student2 where id > 2 and id < 6
总结
到此这篇关于mysql中union和union all的使用及注意事项的文章就介绍到这了,更多相关mysql union和union all内容请搜索之前的文章或继续浏览下面的相关文章希望大家以后多多支持!
文章来源:丸子建站
文章标题:mysql中union和union all的使用及注意事项
https://www.wanzijz.com/view/59290.html