带例子详解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
结果:
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
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
Union All
select * from Student3
union ALL
select * from Student4
测试结果显示:只有当涉及的几个表的列具有相同的数量,才能使用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
Union All
select * from Student3
union ALL
select * from Student4
测试结果显示:如果当列数量一样,列名不相同,那么列名优先显示先执行Select语句的结果集的列名
最后
上面进行了对 “重复数”、“列数不同”、“列数相同,但列名不相同”进行测试,我得出了自己认为的答案
来源:https://blog.csdn.net/MDZZ666/article/details/105993421


猜你喜欢
- 本文实例讲述了MySQL 的启动和连接方式。分享给大家供大家参考,具体如下:MySQL运行包括两部分,一部分是服务器端程序mysqld,另外
- 在运维过程中,经常需要读取mysql的结果输出并进行响应的处理,这节介绍如何用Python读取mysql结果表并进行相应的整理。进行mysq
- 前言python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符
- 在接口测试学习过程中,遇到了利用requests库进行文件下载和上传的问题。同样,在真正的测试过程中,我们不可避免的会遇到上传和下载的测试。
- 1.官网语法pandas.read_csv(filepath_or_buffer, sep=NoDefault.no_default**,*
- 我想没多少人敢保证写JavaScript能不用调试,那选择用什么方式调试会比较好呢?告别了我最爱的alert("MM")
- pytorch的广播语义(broadcasting semantics),和numpy的很像,所以可以先看看numpy的文档:1、什么是广播
- 下载的数据是pascal voc2012的数据,已经有annotation了,不过是xml格式的,训练的模型是在Google模型的基础上加了
- 楔子Python 有一个第三方模块叫 psutil,专门用来获取操作系统以及硬件相关的信息,比如:CPU、磁盘、网络、内存等等。下面来看一下
- 今天继续给大家介绍Python相关知识,本文主要内容是Python asyncio异步编程简单实现。一、asyncio事件循环简介async
- 本文实例讲述了Android基于TCP和URL协议的网络编程。分享给大家供大家参考,具体如下:手机本身是作为手机终端使用的,因此它的计算能力
- 如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。请回想一下在硬盘上是如何查找文件的。您肯
- 1.SQL Server对于SQL Server 2000来说,它提供了两个全新的函数(IDENT_CURRENT,SCOPE_IDENTI
- 本文主要介绍Python3.6及TensorFlow的安装和配置流程。一、Python官网下载自己电脑和系统对应的Python安装包。&nb
- 很多人都听过WAMP这个词吧,首先来看WAMP是什么意思?Windows下的Apache+MySQL+PHP,称为WAMP。属于WAMP环境
- 在用户体验量化方法研究(一)中,我们以用户体验层次模型为基础,提出了三种量化用户体验的方法:以任务为中心、以行为为中心以及以体验为中心的量化
- 前言Golang 是一种并发友好的语言,使用 goroutines 和 channels 可以轻松地实现多线程爬虫。具体地说,实现的是多协程
- 闭包的定义非常晦涩——闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落。
- 列表渲染 key 的原理和作用key就是为该节点做身份标识,如果对key绑定index的值,那么很容易出现问题:1.若对数据进行:逆序添加、
- 1、登录mysqlmysql -uroot -p2、先查询都有哪些用户select host,user from mysql.user;红色