mysql 中 union 和 union all 的区别与使用场景

目录

一.前言

二.使用场景

sql的书写格式

 三.区别

区别总结:

效率:


一.前言

在我们日常开发中, 经常会遇到分表储存数据的场景, 取数据时需要取出两个表的的数据, 将两个表的数据联合查询, 这时我就用到了我们的数据库函数union 和 union all, 其实我们也可以取用代码实现想要的联合查询结果, 但我个人认为还是使用数据开函数比较好一点 

二.使用场景

我们的两个表中要有相同存储数据的字段

sql的书写格式

注意: 再写sql时 union和 union all 内部select 语句要有相同数量的字段, 列必须要有相同的数据类型, 同时每条select语句中的字段的顺序必须相同

示例:

sql一:
union all格式:
SELECT a.credit_code FROM zjjg_security_basic_info  a
UNION ALL
SELECT b.credit_code FROM zjjg_detection_base_info b

sql二:
union 格式:
SELECT a.credit_code FROM zjjg_security_basic_info  a
UNION 
SELECT b.credit_code FROM zjjg_detection_base_info b

如图:

mysql 中 union 和 union all 的区别与使用场景_第1张图片

 三.区别

根据标题二的书写规范和sql我们看一下结果

sq一的union all语句结果

cred_code
123456
340122111122223333
baocun
1234562
ANPING
123214134123412
 91540000783519684L
111222
340122111122223333
1245
1234562
123214134123412

sql二的union 语句结果

credit_code
123456
340122111122223333
baocun
1234562
ANPING
123214134123412
 91540000783519684L
111222
1245

结论: union all语句包含重复结果而union不包含重复结果

区别总结:

1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct;

2、union all: 对两个结果集进行并集操作,, 不管是不是重复;

效率:

union 会去重,表数据量超大时,distinct(去重)的效率是极低的(sql中不建议使用),而且连表数量比较多时,这就导致了sql查询起来十分缓慢,而union all是不会distinct(去重)的在条件允许并且数据量大的时候建议用union all

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