18  
查询码: 00000438
SQL SERVER: 合并相关操作(Union,Except,Intersect)
来源:https://www.cnblogs.com/jhxk/articles/1614370.html
作者: 周杨 于 2019年03月27日 发布在分类 / 计算机应用 / 数据库 / SQLSERVER ,于 2019年03月27日 编辑
select 结果 temptable 两个 数据 博客 except intersect 重复 temptable2

SQL Server 中对于结果集有几个处理,值得讲解一下

1. 并集(union,Union all)

这个很简单,是把两个结果集水平合并起来。例如

SELECT * FROM A

UNION

SELECT * FROM B

【注意】union会删除重复值,也就是说A和B中重复的行,最终只会出现一次,而union all则会保留重复行。


2. 差异(Except)

就是两个集中不重复的部分。例如

SELECT * FROM A

EXCEPT

SELECT * FROM B

这个的意思是,凡是不出现在B表中的A表的行。


3. 交集(intersect)

就是两个集中共同的部分。例如

SELECT * FROM A

INTERSECT

SELECT * FROM B

这个的意思是,同时出现在A和B中的记录


本文由作者:陈希章 于 2009/6/26 18:31:02 发布在:http://www.cnblogs.com/chenxizhang/
 



union, EXCEPT 和 INTERSECT使用方法


SQL中的UNION, EXCEPT 和 INTERSECT做下演示:

这三个放在一起是有理由的,因为他们都是操作两个或多个结果集,并且这些结果集有如下限制:

  • 所有查询中的列数和列的顺序必须相同.
  • 数据类型必须兼容.

并且它们都是处理于多个结果集中有重复数据的问题

首先还是创建测试环境


use tempdb

create table tempTable1 (id int primary key identity , price int )
create table tempTable2 (id int primary key identity , price int )
insert into tempTable1 select 3 union all select 1 union all select 2 union all select 3
insert into tempTable2 select 3 union all select 4 union all select 1 union all select 2

select * from temptable1
select * from temptable2


两个表的初始结果如下


非常简单的两个表,列数和列顺序一样. 只要保证有数据完全一致,就可以说他们是重复的数据, 这样用上面3个运算词才会有效.

先来看看UNION和UNION ALL

select * from temptable1
union
select * from temptable2

select * from temptable1
union all
select * from temptable2


有 ALL 关键字是完全整合两个结果集,而无 ALL 是在之前的基础上去重了,所以第一个查询中{id:1, price:3}只会显示一条,结果如下:

在来看看EXCEPT, 也是去重的, 但是它在去掉两个或多个集合中重复数据的之后, 只会保留第一个结果集中的数据

select * from temptable1
except
select * from temptable2


其实也是查询表A, 看表A的数据在表B中是否存在, 如果存在, 则删掉

而INTERSECT比较好理解, 就是查询两个结果集的并集, 利用上面的数据,查询到的结果只有一条, 就是{id:1, price:3}, 这里就不给出代码和结果图





 历史版本

备注 修改日期 修改人
CREAT 2019-03-27 17:02:52[当前版本] 系统管理员

 附件

附件类型

GIFGIF PNGPNG

知识分享平台 -V 5.1.4 -大信谛威