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类 ...
随机推荐
- [LeetCode]题解(python):032-Longest Valid Parentheses
题目来源 https://leetcode.com/problems/longest-valid-parentheses/ Given a string containing just the cha ...
- 【转】Android的材料设计兼容库(Design Support Library)
转自:http://www.jcodecraeer.com/a/anzhuokaifa/developer/2015/0531/2958.html?mType=Group Android的材料设计兼容 ...
- table_tricks_基于bootstrap
<!DOCTYPE html><html><head> <title>Bootstrap 实例 - 基本表单</title> <lin ...
- MySQL · 性能优化 · 条件下推到物化表
MySQL · 性能优化 · 条件下推到物化表 http://mysql.taobao.org/monthly/2016/07/08/ 背景 MySQL引入了Materialization(物化)这一 ...
- cocos2dx 3.x(Button传统按钮)
// // ATTLoagingScene.hpp // ATT // // Created by work on 16/10/13. // // #ifndef ATTLoagingScene_hp ...
- NLS_LANG参数说明
NLS_LANG参数说明 格式: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每个成分控制了NLS子集的特性.其中: Lang ...
- scala学习笔记(1)
下载和安装Scala 前往http://www.scala-lang.org/downloads下载Scala在各个平台的安装包,安装后即可在运行scala编译器和交互式命令行环境(interacti ...
- G面经Prepare: Search word delete sequence in dictionary
给一个单词一个字典,每次删除单词里任一个字母直到剩下一个字母,形成一个序列,比如office->offce->ofce->ofc->oc->c.问是否字典里存在一个这种序 ...
- JS练习题 显示登入者相关好友
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 有时候dfs可以简化各种组合的操作
比如有时某些操作是组合起来的,你不用去模拟每一种,把其拆分为几种单个操作,就可以了,因为反正会枚举所有的,所以也反正会组合出那种...而且不易出错.. 当然以上只是一种思维方式,并不一定可行,还要考虑 ...