带例子详解Sql中Union和Union ALL的区别

作者:我赢了算我输 时间:2024-01-23 01:45:00 

前言

一段时间没有用Union和Union,再用的时候忘了怎么用了。。。所以做一篇文章来记录自己学Union和Union的经历。

提前准备

在Sql Server 创建两张表,下面是创建表sql语句。

create table Student1(
  Id varchar(50) not null,
  Name varchar(50) not null,
  Age int not null
)
create table Student2(
  Id varchar(50) not null,
  Name varchar(50) not null,
  Age int not null
)
insert into Student1 values(1,'学生A',13)
insert into Student1 values(2,'学生B',13)
insert into Student1 values(3,'学生C',13)
insert into Student1 values(4,'学生D',13)

insert into Student2 values(1,'学生A',13)
insert into Student2 values(2,'学生E',13)
insert into Student2 values(3,'学生F',13)
insert into Student2 values(4,'学生D',13)

创建两张一摸一样的表并插入数据。

测试

UNION:合并两个或三个以上的Select语句的结果集,合并之后的结果集不包含重复的数

UNION ALL:合并两个或三个以上的Select语句的结果集,合并之后的结果集可以包含重复的数 。

可以看出,Union和Union All 的区别在于是否“包含重复数”,而重复数又指的是什么呢?当出现一条数据与另一条数据的所有列数据完全相同的情况,那么就称这条数据为重复数,下面拿例子来演示

Union

select * from Student1
union
select * from Student2

结果:

带例子详解Sql中Union和Union ALL的区别

id为2、3的出现了两条,是因为Student1 id为2的Name列数据和Student2 id为2的Name列数据不同 (Student1为学生B,Student为学生E),并不能算重复数。
id为1、4、5只出现一次,是因为Student1和Student2中id为1、4、5的列数据完全相同,所以算重复数

Union ALL

select * from Student1
union ALL
select * from Student2

带例子详解Sql中Union和Union ALL的区别

union all 就无需顾及到重复数,直接把两个表的结果集合并一起展示就OK了。
除此之外,还有几种情况

1.当表Student1和表Student2字段数量不同的情况下,使用Union和Union ALL

create table Student3(
  Id varchar(50) not null,
  Name varchar(50) not null,
  Age int not null
)
create table Student4(
  Id varchar(50) not null,
  Name varchar(50) not null
)

insert into Student3 values(1,'学生A',13)
insert into Student3 values(2,'学生B',13)
insert into Student3 values(3,'学生C',13)
insert into Student3 values(4,'学生D',13)

insert into Student4 values(1,'学生A')
insert into Student4 values(2,'学生E')
insert into Student4 values(3,'学生F')
insert into Student4 values(4,'学生D')

Student3 和Student4的字段不一样,Student3表比Student4表多一个Age字段

Union

select * from Student3
union
select * from Student4

带例子详解Sql中Union和Union ALL的区别

Union All

select * from Student3
union ALL
select * from Student4

带例子详解Sql中Union和Union ALL的区别

测试结果显示:只有当涉及的几个表的列具有相同的数量,才能使用Union和UnionALL

2.当表A和表B的列相同,但是列名不一致的情况,使用Union和Union ALL

create table Student3(
  Id varchar(50) not null,
  NameTest varchar(50) not null,
  Age int not null
)
create table Student4(
  Id varchar(50) not null,
  Name varchar(50) not null,
  Age int not null
)

insert into Student3 values(1,'学生A',13)
insert into Student3 values(2,'学生B',13)
insert into Student3 values(3,'学生C',13)
insert into Student3 values(4,'学生D',13)

insert into Student4 values(1,'学生A',13)
insert into Student4 values(2,'学生B',13)
insert into Student4 values(3,'学生C',13)
insert into Student4 values(4,'学生D',13)

这里Student3的第二个栏位是NameTest,而Student4第二个栏位是Name,Student3和Student4的数据一样。

union

select * from Student3
union
select * from Student4

带例子详解Sql中Union和Union ALL的区别

Union All

select * from Student3
union  ALL
select * from Student4

带例子详解Sql中Union和Union ALL的区别

测试结果显示:如果当列数量一样,列名不相同,那么列名优先显示先执行Select语句的结果集的列名

最后

上面进行了对 “重复数”、“列数不同”、“列数相同,但列名不相同”进行测试,我得出了自己认为的答案

来源:https://blog.csdn.net/MDZZ666/article/details/105993421

标签:Sql,Union,Union,ALL
0
投稿

猜你喜欢

  • Go语言判断指定文件是否存在的方法

    2024-05-21 10:21:38
  • python定时利用QQ邮件发送天气预报的实例

    2021-10-14 00:45:16
  • matplotlib 纵坐标轴显示数据值的实例

    2021-10-02 12:55:43
  • JS中把函数作为另一函数的参数传递方法(总结)

    2024-05-05 09:14:39
  • 详细解读php的命名空间(二)

    2023-06-06 16:12:38
  • Python3中的f-Strings增强版字符串格式化方法

    2022-07-07 12:34:36
  • 如何使用python中的networkx来生成一个图

    2022-08-13 05:13:32
  • 对pandas的dataframe绘图并保存的实现方法

    2021-12-21 14:54:50
  • 浅谈vue父子组件怎么传值

    2024-05-09 15:16:15
  • 浅谈python多线程和多线程变量共享问题介绍

    2022-08-29 04:34:18
  • Python源码加密与Pytorch模型加密分别介绍

    2023-11-30 13:05:03
  • pytorch 数据处理:定义自己的数据集合实例

    2021-09-11 06:10:21
  • 整理及优化CSS代码的七个原则[译]

    2009-04-23 12:35:00
  • JSP EL表达式详细介绍

    2023-07-02 22:32:32
  • 关于Pandas count()与values_count()的用法及区别

    2021-09-25 08:28:20
  • 数据库性能优化二:数据库表优化提升性能

    2024-01-22 12:07:19
  • 教你使用python做一个“罚点球”小游戏

    2022-10-12 00:09:03
  • Python实现企业微信机器人每天定时发消息实例

    2023-09-04 22:08:40
  • vue面试之new Vue的时候到底做了什么

    2024-06-05 15:31:27
  • django foreignkey外键使用的例子 相当于left join

    2021-04-17 15:52:33
  • asp之家 网络编程 m.aspxhome.com