图 1 UNION 中若有重复的行,会被移除,只留下一个

1.简介

EXCEPT和INTERSECT运算符使您可以比较两个或多个SELECT语句的结果并返回非重复值。

2.区别

EXCEPT运算符返回由EXCEPT运算符左侧的查询返回、而又不包含在右侧查询所返回的值中的所有非重复值。

INTERSECT返回由INTERSECT运算符左侧和右侧的查询都返回的所有非重复值。

3.注意事项

(1).使用EXCEPT或INTERSECT比较的结果集必须具有相同的结构。它们的列数必须相同,并且相应的结果集列的数据类型必须兼容

(2).INTERSECT运算符优先于EXCEPT

(3).SELECT INTO必须是包含INTERSECT或EXCEPT运算符的语句中的第一个查询,用来创建容纳最终结果集的表

(4).ORDER BY子句中的列名或别名必须引用左侧查询返回的列名

4.例题:

--建立3个表,分别插入数据

create table TableA(col1 int)

insert into TableA select 1

insert into TableA select 1

insert into TableA select 2

insert into TableA select 3

insert into TableA select 4

insert into TableA select 4

insert into TableA select 5

insert into TableA select null

insert into TableA select null

create table TableB(col2 int)

insert into TableB select null

insert into TableB select 1

insert into TableB select 2

insert into TableB select 3

create table TableC(col3 int)

insert into TableC select 1

insert into TableC select 5

insert into TableC select 6

--利用EXCEPT

--找出TableA表的col1列不存在Tablec表col1列的所有非重复值

SELECT col1 FROM TableA

EXCEPT

SELECT col3 FROM Tablec

结果如下:

col1

-----------

NULL

2

3

4

--sql 2000的版本,用not exists实现EXCEPT的功能 SELECT col1

FROM TableA as a

where not exists(SELECT col3 FROM Tablec where a.col1=col3)

group by col1

--sql 2000,not in是得不到上述结果的

--空值表示值未知。空值不同于空白或零值。没有两个相等的空值。

--比较两个空值或将空值与任何其他值相比均返回未知,这是因为每个空值均为

未知。

--使用IN或NOT IN比较后返回的所有空值都将返回UNKNOWN。 --将空值与IN或NOT IN一起使用会产生意外结果。 SELECT col1

FROM TableA

where col1 not in(SELECT col3 FROM Tablec)

group by col1

结果如下:

col1

-----------

2

3

4

--INTERSECT运算符优先于EXCEPT --运算步骤是:先运算TableB和TableC的INTERSECT,再和TableA运算EXCEPT

SELECT col1 FROM TableA EXCEPT

SELECT col2 FROM TableB INTERSECT

SELECT col3 FROM TableC

结果如下:

col1

-----------

NULL

2

3

4

5

--SELECT INTO的应用

--SELECT INTO必须是语句中的第一个查询 --我记得SELECT INTO与UNION运算符的使用也是这样的规则

SELECT col1

into #tem

FROM TableA

EXCEPT

SELECT col3

FROM Tablec

select * from #tem drop table #tem

结果如下:

col1

----------- NULL

2

3

4

[讲解]sql except和intersect运算符(比拟两个或多个select语句的结果并前去非重复值)的更多相关文章

  1. Mysql训练:两个表中使用 Select 语句会导致产生 笛卡尔乘积 ,两个表的前后顺序决定查询之后的表顺序

    力扣:超过经理收入的员工 Employee 表包含所有员工,他们的经理也属于员工.每个员工都有一个 Id,此外还有一列对应员工的经理的 Id. +----+-------+--------+----- ...

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

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

  3. UNION操作用于合并两个或多个 SELECT 语句的结果集。

    UNION操作用于合并两个或多个 SELECT 语句的结果集. 大理石平台价格 使用示例: $Model->field('name') ->table('think_user_0') -& ...

  4. SQL-Union、Union ALL合并两个或多个 SELECT 语句的结果集

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列 ...

  5. SQL Server里PIVOT运算符的”红颜祸水“

    在今天的文章里我想讨论下SQL Server里一个特别的T-SQL语言结构——自SQL Server 2005引入的PIVOT运算符.我经常引用这个与语言结构是SQL Server里最危险的一个——很 ...

  6. Mysql中两个select语句的连接

    Mysql中两个select语句连接需要用到操作符 SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥 ...

  7. 用sql的select语句从数据库中获取数据

    基本的select语句 select语句中的算数表达式和NULL值 列的别名 使用连接符操作,literal character strings,alternative quote operator, ...

  8. SQL Server-聚焦APPLY运算符(二十七)

    前言 其实有些新的特性在SQL Server早就已经出现过,但是若非系统的去学习数据库你会发现在实际项目中别人的SQL其实是比较复杂的,其实利用新的SQL Server语法会更加方便和简洁,从本节开始 ...

  9. 实例讲解 SQL 注入攻击

    这是一篇讲解SQL注入的实例文章,一步一步跟着作者脚步探索如何注入成功,展现了一次完整的渗透流程,值得一读.翻译水平有限,见谅! 一位客户让我们针对只有他们企业员工和顾客能使用的企业内网进行渗透测试. ...

随机推荐

  1. 覆盖Django mysql model中save方法时碰到的一个数据库更新延迟问题

    最近有一个需求,通过django的admin后台,可以人工配置5张表的数据,这些数据进行一些业务规则处理后会统一成一份数据缓存在一个cache之中供服务端业务访问,因而任何一张表的数据更新(增.删.改 ...

  2. Nginx入门篇(六)之反向代理和负载均衡

    一.Nginx负载均衡集群 介绍 负载均衡(Load Balance)集群提供了一种行之有效的办法,来扩展网络设备和服务器负载.带宽和吞吐量,同时加强了网络数据处理能力,提供了网络的灵活性和可用性. ...

  3. Mac OS 上 VIM 8.0 安装体验

    VIM 8.0 赶在中秋前发布 The best way to install Vim on Unix is to use the sources. This requires a compiler ...

  4. 二、Django用户认证之cookie和session

    1.cookie原理 Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制.目前Cookie已经成为标准,所有的主流浏览器如IE.Netscape.Firefox.O ...

  5. 【一】H.264/MPEG-4 Part 10 White Paper 翻译之 Overview of H.264

    翻译版权所有,转载请注明出处~ xzrch@2018.09.14 ------------------------------------------------------------------- ...

  6. ffmpeg 踩坑实录 近期使用总结(三)

    一.背景介绍 将ffmpeg运用到项目上已经有一段时间了,趁现在有空赶紧记下来. 二.技术点总结    2.1 实现方式 项目里面主要运用的形式是,在java端,调用操作系统的方法,并执行切片命令. ...

  7. Django-建立网页

    进入cmd模式做 django-admin startproject helloworld创建一个project,并命名helloworld,新生成的文件结构如下   输入python manage. ...

  8. selenium、unittest——POM框架并出报告

    学习隔壁大神的POM框架,结合自己的用例进行修改整理并执行,操作遇到的主要问题是如何分布的写各个模块并统一运行,每个文件夹想要import里面的模块需要有__init__模块 POM主要分为三个部分, ...

  9. File Transfer(并查集)

    题目大意:将多个电脑通过网线连接起来,不断查询2台电脑之间是否连通. 问题来源:中国大学mooc 05-树8 File Transfer (25 分) We have a network of com ...

  10. PCA(主成分析)

    PCA通过将高维空间向量映射到低维,对于数据进行处理