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) - 转载的更多相关文章

  1. SQL SERVER: 合并相关操作(Union,Except,Intersect)

    SQL SERVER: 合并相关操作(Union,Except,Intersect) use tempdb create table tempTable1 (id int primary key id ...

  2. sql server 日期相关操作

    ), ): ), ): :57AM ), ): ), ): ), ): ), ): ), ): ), ): ), ): , ), ): :: ), ): :::827AM ), ): ), ): ), ...

  3. SQL Server 日期相关

    原文:SQL Server 日期相关 原帖出处:http://blog.csdn.net/dba_huangzj/article/details/7657979 对于开发人员来说,日期处理或许简单,或 ...

  4. Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)

    Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...

  5. Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)

    Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...

  6. SQL Server 多库操作 库名.dbo.表名 出错的问题!

    SQL Server 多库操作 库名.dbo.表名 出错的问题! 数据库名不要用数字开头. 例如:343934.dbo.user 这就会出错.md a343934.dbo.user 就没问题!! 记住 ...

  7. Sql Server 内存相关计数器以及内存压力诊断

    在数据库服务器中,内存是数据库对外提供服务最重要的资源之一, 不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用. 在Sql Server服务器中 ...

  8. SQL SERVER 复制相关存储过程

    适用于所有类型复制的过程 过程 说明 sp_addscriptexec 向发布的所有订阅服务器发布 Microsoft SQL Server 脚本(.sql 文件). sp_adjustpublish ...

  9. sql server Geometry 类型操作 笔记

    sqlGeometry 类型为sql server 2008之后的版本 新加的一种CLR扩展数据类型,为广大sql server开发人员存储几何类型及空间运算提供极大的便利,下面说明geometry类 ...

随机推荐

  1. Magento去掉价格的小数点

    magento的默认情况,价格后面是有小数点的,我们来看下如何正确的来去掉小数点. 1.复制如下路径的文件 app/code/core/Mage/Directory/Model/Currency.ph ...

  2. sell-- Calendar 和 Date- 01,月份不变年份+3或直接到2017

    1. 2016/11/24 import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calen ...

  3. search支持多种标签

    织梦的搜索页面支持dede标签的方法一 打开文件:include/arc.searchview.class.php 找到: require_once(DEDEINC."/taglib/hot ...

  4. 从printf("\40d\n")看转义字符

    1.  八进制  十进制  十六进制 二进制:0 1 2 3 4 5 6 7    \0(或省略0,\) ,\28 按道理是错误的,但是C语言把它解释为 \2,8错误了就不考虑 十进制:0 1 2 3 ...

  5. Number类型

    这是计算基础,复杂的以后不充. 1.Number(); var box = { toString :function(){ return '123'; } }; alert(Number(box)); ...

  6. thinkphp 最简单的引入百度编辑器的方法

    后台肯定是框架了...编辑器放在框架里面... 后台首页比如是这样的... <html> <frameset cols="10%,90%"> <fra ...

  7. SwipeRefreshLayout实现上拉加载

    原来的Android SDK中并没有下拉刷新组件,但是这个组件确实绝大多数APP必备的一个部件.好在google在v4包中出了一个SwipeRefreshLayout,但是这个组件只支持下拉刷新,不支 ...

  8. Java学习——对象和类

    1. 入门例子 package jihite; public class Dog{ int dogage; public Dog(String name){ System.out.println(&q ...

  9. iOS 快递查询

    #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...

  10. 布置theano(Windows10,无cuda)

    软件包准备 1.Anaconda 下载地址,包含python.numpy.scipy.nose.pip等包,嗯,很爽. 2.tdm64-gcc 下载地址,windows下的gcc.g++编译器,用来t ...