码迷,mamicode.com
首页 > 数据库 > 详细

SQL SERVER: 合并相关操作(Union,Except,Intersect) - 转载

时间:2016-01-23 23:07:27      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

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表的行。

【注意】except也会删除重复值,也就是说A中重复的数据行,最终只会出现一次,而且except不支持all语句

 

3. 交集(intersect)

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

SELECT * FROM A

INTERSECT

SELECT * FROM B

技术分享

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

【注意】intersect也会删除重复值,也就是说同时出现在A和B中重复的数据行,最终只会出现一次,而且intersect也不支持all语句

 

本文由作者:陈希章 于 2009/6/26 18:31:02 发布在:http://www.cnblogs.com/chenxizhang/ 本文版权归作者所有,可以转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 更多博客文章,以及作者对于博客引用方面的完整声明以及合作方面的政策,请参考以下站点:陈希章的博客中心 本文是使用博客同步和管理系统自动于2009/6/26 18:31:04 从 陈希章@博客园 同步过来的。原文地址: http://www.cnblogs.com/chenxizhang/archive/2009/06/26/1511889.html ,发表于2009/6/26 10:31:00.

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chen_xizhang/archive/2009/06/26/4301621.aspx

 

 

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}, 这里就不给出代码和结果图

 

SQL SERVER: 合并相关操作(Union,Except,Intersect) - 转载

标签:

原文地址:http://www.cnblogs.com/OpenCoder/p/5154135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!