SQL中union和union all的那点事

编程软件向来是直男思维,容不得一点模糊和偏差,常常是差之毫厘,谬以千里,我们必须要有扎实的功底,以及精益求精的态度,才能准确无误的进行数据检索或处理。面对相似相近的操作符必须清晰知道它的定义、用法及区别,才能高效顺畅的达成目的。废话不多说,我们就来聊聊 union和union all的那点事。

先来认识一下union:

定义:union操作符用于合并两个或多个 select 语句的结果集。

简单来说,就是将两个或多个目标表合并成一个表。其用法如下:

(1)被合并的目标表必须有相同的列数。

(2)被合并的目标表对应列的顺序相同。

(3)对应列必须有相同或相似的数据类型。

(4)对应列不必有相同的列名,合并后,第一个表的列名会覆盖其他表的列名。

那 union 和 union all 到底有什么区别和联系呢?

union 和 union all 的作用一样,都是合并两个或多个表。

区别在于union 是去重联结,如果两个目标表中有相同的行,结果表中只会取其中一行;而 union all 则是不去重联结,简单将目标表上下堆叠,保留所有条数。

举个例子更好理解。

数据库中现有两个年级的学生信息表,其中 Rose 同学成绩优异从一年级跳级到二年级,因此在两个学生表中都有她的信息 。

student_information_1

student_nameagesexgrade
Jack18一年级
Rose19一年级

student_information_2

s_names_ages_sexs_grade
Rose19二年级
Scarlett20二年级
Rhett20二年级

假设我们想得到所有年级学生的性别和年龄分布,该怎么处理呢?union  or  union all?

我们利用 union 进行合并,代码如下:

select student_name,age,sex
from student_information_1

union 

select s_name,s_age,s_sex
from student_information_2

结果表为:

student_nameagesex
Jack18
Rose19
Scarlett20
Rhett20

我们再来看看利用 union all 进行合并,结果会怎样:

select student_name,age,sex
from student_information_1

union all

select s_name,s_age,s_sex
from student_information_2
student_nameagesex
Jack18
Rose19
Rose19
Scarlett20
Rhett20

由此可见,union 合并后将进行去重处理,只保留肉丝童鞋的一条信息;而 union all 则不会去重,简单的将 student_information_1和 student_information_2 中的信息取出后合并,因此出现两条 Rose 的信息。

到这里,各位看官应该清楚了union 和 union all 的用法和区别了吧~ 

如有其他看法,欢迎一起讨论~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值