带例子详解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
猜你喜欢
- 什么是SeleniumSelenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流
- 上节我们了解了图形验证码的识别,简单的图形验证码我们可以直接利用 Tesserocr 来识别,但是近几年又出现了一些新型验证码,如滑动验证码
- tbody 标签表格主体(正文)。该标签用于组合 HTML 表格的主体内容。tbody 元素应该与&
- Bit-Packed Data TypesMySQL有一些存储类型使用一个值中的一些单个的比特位来紧凑的存储数据。纯技术上将,不管是底层的存
- Fabric 是基于 SSH 协议的 Python 工具,相比传统的 ssh/scp 方式,用 Python 的语法写管理命令更易读也更容易
- 注:因为最近想用一下Python做一些简单小游戏的开发作为项目练手之用,而Pygame模块里面提供了大量的有用的方法和属性。今天我们就在之前
- 在我之前解释了flask如何支持多线程主要通过两个类来实现,LocalStack和Local,在Local中有两个属性,__storage_
- 题目:求一个3*3矩阵对角线元素之和。程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。 def two_dime
- 最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学
- 本文实例讲述了php常用字符串长度函数strlen()与mb_strlen()用法。分享给大家供大家参考,具体如下:int strlen (
- 作为开发者,我们可以通过以下3中方式来配置logging:1)使用Python代码显式的创建loggers, handlers和format
- 最近看到大家都练习写树,偶也学习学习写了一个,大家多多批评,我好进步。不过我看了一些树的xml文档都是在xml中就已经有了树的结构,所以我写
- 一、前言python的两个单元测试包分别是 doctest 和 unittest,这两个包的使用起来各有长处,适用于不同的场景doctest
- 格式getopt(args, options[, long_options])1.args表示要解析的参数. 2.options表示脚本要识
- 基础这个模块是socket的异步实现,让我们先来熟悉一下模块中的一些类和方法:1.asyncore.loop输入一个轮询循环直到通过计数或打
- 在MySQL中,一个字符串中,如果某个序列具有特殊的含义,则这个序列以反斜线符号(‘\’)开头,称为转义字符。常见的转义字符:\0 ASCI
- 为什么要用缓存?首先说,为什么要用缓存的,由于Django是 * 站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加
- UUID 全称是 Universally unique identifier,它是一种识别符,使用任意的计算机都可以生成,不需要一个中央数据
- 在中文网页中最常见的网页编码就是GB2312和UTF-8了,本文介绍了ASP实现GB2312编码转换为UTF-8编码的函数:Function
- 在平常的一些的小规模的数据的过滤、清洗过程中使用最多的就是正则表达式,但是随着数据规模的增大,正则表达式就显得有些心有余力不足了。正则表达式