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

 更新时间:2022年09月25日 11:22:42   作者:我赢了算我输  
这篇文章主要介绍了带例子详解Sql中Union和Union ALL的区别,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

前言

一段时间没有用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语句的结果集的列名

最后

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

到此这篇关于带例子详解Sql中Union和Union ALL的区别的文章就介绍到这了,更多相关Sql Union和Union ALL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL SQL预处理(Prepared)的语法实例与注意事项

    MySQL SQL预处理(Prepared)的语法实例与注意事项

    所谓预编译语句就是将此类SQL语句中的值用占位符替代,可以视为将 SQL语句模板化或者说参数化,一般称这类语句叫Prepared Statements,下面这篇文章主要给大家介绍了关于MySQL SQL预处理(Prepared)的相关资料,需要的朋友可以参考下
    2022-01-01
  • IDEA配置连接MYSQL数据库遇到Failed这个问题解决

    IDEA配置连接MYSQL数据库遇到Failed这个问题解决

    这篇文章主要介绍了IDEA配置连接MYSQL数据库遇到Failed这个问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MySQL慢查询以及重构查询的方式记录

    MySQL慢查询以及重构查询的方式记录

    MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句,这篇文章主要给大家介绍了关于MySQL慢查询以及重构查询的相关资料,需要的朋友可以参考下
    2021-06-06
  • MySQL执行计划的深入分析

    MySQL执行计划的深入分析

    这篇文章主要给大家介绍了关于MySQL执行计划的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • update.where无索引导致MySQL死锁问题解决

    update.where无索引导致MySQL死锁问题解决

    这篇文章主要为大家介绍了update.where无索引导致MySQL死锁问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • MySQL存储过程in、out和inout参数示例和总结

    MySQL存储过程in、out和inout参数示例和总结

    这篇文章主要给大家介绍了关于MySQL存储过程in、out和inout参数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Can''t connect to local MySQL through socket ''/tmp/mysql.sock''解决方法

    Can''t connect to local MySQL through socket ''/tmp/mysql.so

    今天小编就为大家分享一篇关于Can't connect to local MySQL through socket '/tmp/mysql.sock'解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • mysql自联去重的一些笔记记录

    mysql自联去重的一些笔记记录

    这篇文章主要给大家介绍了关于mysql自联去重的一些笔记记录,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • mysql优化的重要参数 key_buffer_size table_cache

    mysql优化的重要参数 key_buffer_size table_cache

    MySQL服务器端的参数有很多,但是对于大多数初学者来说,众多的参数往往使得我们不知所措,但是哪些参数是需要我们调整的,哪些对服务器的性能影响最大呢
    2016-05-05
  • mysql 查询数据库中的存储过程与函数的语句

    mysql 查询数据库中的存储过程与函数的语句

    mysql 查询数据库中的存储过程与函数的语句,需要的朋友可以参考下。
    2011-05-05

最新评论