SQL SERVER: 合并相关操作(Union,Except,Intersect) - 转载
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}, 这里就不给出代码和结果图
注意UNION是对合并后的整个结果集去重
我们运行下面的语句
SELECT *
FROM
(
SELECT 1 AS ID,N'A' AS NAME
UNION ALL
SELECT 1 AS ID,N'A' AS NAME
UNION ALL
SELECT 1 AS ID,N'A' AS NAME
) AS T
UNION
SELECT *
FROM
(
SELECT 1 AS ID,N'A' AS NAME
UNION ALL
SELECT 2 AS ID,N'B' AS NAME
) AS T
结果如下:

其效果相当于:
SELECT DISTINCT *
FROM
(
SELECT *
FROM
(
SELECT 1 AS ID,N'A' AS NAME
UNION ALL
SELECT 1 AS ID,N'A' AS NAME
UNION ALL
SELECT 1 AS ID,N'A' AS NAME
) AS T
UNION ALL
SELECT *
FROM
(
SELECT 1 AS ID,N'A' AS NAME
UNION ALL
SELECT 2 AS ID,N'B' AS NAME
) AS T
) AS Temp
SQL SERVER: 合并相关操作(Union,Except,Intersect) - 转载的更多相关文章
- SQL SERVER: 合并相关操作(Union,Except,Intersect)
SQL SERVER: 合并相关操作(Union,Except,Intersect) use tempdb create table tempTable1 (id int primary key id ...
- sql server 日期相关操作
), ): ), ): :57AM ), ): ), ): ), ): ), ): ), ): ), ): ), ): , ), ): :: ), ): :::827AM ), ): ), ): ), ...
- SQL Server 日期相关
原文:SQL Server 日期相关 原帖出处:http://blog.csdn.net/dba_huangzj/article/details/7657979 对于开发人员来说,日期处理或许简单,或 ...
- Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)
Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...
- Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...
- SQL Server 多库操作 库名.dbo.表名 出错的问题!
SQL Server 多库操作 库名.dbo.表名 出错的问题! 数据库名不要用数字开头. 例如:343934.dbo.user 这就会出错.md a343934.dbo.user 就没问题!! 记住 ...
- Sql Server 内存相关计数器以及内存压力诊断
在数据库服务器中,内存是数据库对外提供服务最重要的资源之一, 不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用. 在Sql Server服务器中 ...
- SQL SERVER 复制相关存储过程
适用于所有类型复制的过程 过程 说明 sp_addscriptexec 向发布的所有订阅服务器发布 Microsoft SQL Server 脚本(.sql 文件). sp_adjustpublish ...
- sql server Geometry 类型操作 笔记
sqlGeometry 类型为sql server 2008之后的版本 新加的一种CLR扩展数据类型,为广大sql server开发人员存储几何类型及空间运算提供极大的便利,下面说明geometry类 ...
随机推荐
- 判断cdn上的图片可以正常访问到
昨天晚上cdn宕机1小时,要对上传的资检查,写了个简单的小脚本来实现上传过的资源都是正常的(其实非必须),就是练手防止生疏. arr.each do |a | res = Net::HTTP.get_ ...
- vertical-align的理解
vertical-align的理解 定义和用法 vertical-align 属性设置元素的垂直对齐方式 该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐 也就是说 它只是个适用行内元素的属 ...
- [logstash-input-file]插件使用详解(转)
最小化的配置文件 在Logstash中可以在 input{} 里面添加file配置,默认的最小化配置如下: 1 2 3 4 5 6 7 8 9 10 11 input { file ...
- Ubuntu中Apache修改DocumentRoot(修改网站根目录)
今天配置好Apache+PHP+MySQL但是apache默认DocumentRoot是/var/www想把它改到我Windows下进行测试的k:/wwwroot把 apache2.conf 翻了好几 ...
- HashMap put,get操作
HashMap中的put方法 public V put(K key, V value) { //当key为null,调用putForNullKey方法,保存null与table第一个位置中,这是Has ...
- XiaoShi657的留言板
大家好,很荣幸能够借助此平台和大家分享.讨论编程技术! 有什么想对我说的请在这里留言吧
- Swift实战-豆瓣电台(四)歌曲列表的展现
观看地址 http://v.youku.com/v_show/id_XNzMwNDE0OTA4.html 这节的主要内容是如何利用cell展现获取到的数据. 首先申明两个数组来储存我们获取到的数据 v ...
- Groupon面经Prepare: Sort given a range && Summary: Bucket Sort
首先是如何sort一个只有0和1的数组,要求inplace. follow up是告诉一个range,如何在O(N)时间内sort好 两个pointer可解 package Sorting; impo ...
- CentOS 7 安装Dukto(局域网通信工具)
rmp包 http://download.opensuse.org/repositories/home:/colomboem/CentOS_7/x86_64/dukto-6.0-13.1.x86_64 ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...