当前位置:  数据库>sqlserver

except与intersect运算符的区别分析与实例

    来源: 互联网  发布时间:2014-08-29

    本文导语:  1,except和intersect运算符的区别及注意事项 1)、except和intersect运算符使您可以比较两个或多个SELECT语句的结果并返回非重复值。 区别: except运算符返回由except运算符左侧的查询返回、而又不包含在右侧查询所返回的值中的所...

1,except和intersect运算符的区别及注意事项
1)、except和intersect运算符使您可以比较两个或多个SELECT语句的结果并返回非重复值。
区别:
except运算符返回由except运算符左侧的查询返回、而又不包含在右侧查询所返回的值中的所有非重复值。
intersect返回由intersect运算符左侧和右侧的查询都返回的所有非重复值。

2)、注意事项
(1).使用except或intersect比较的结果集必须具有相同的结构。它们的列数必须相同,并且相应的结果集列的数据类型必须兼容
(2).intersect运算符优先于except
(3).SELECT INTO必须是包含intersect或except运算符的语句中的第一个查询,用来创建容纳最终结果集的表
(4).ORDER BY子句中的列名或别名必须引用左侧查询返回的列名

2,几个小例子

代码示例:

--建立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

--ORDER BY子句
--ORDER BY子句中的列名或别名必须引用左侧查询返回的列名
SELECT col1 FROM TableA
intersect
SELECT col3 FROM TableC
order by col1

结果如下:
col1
-----------
1
5


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 深入SQL SERVER合并相关操作Union,Except,Intersect的详解
  • java命名空间java.lang类exception的类成员方法: exception定义及介绍
  • 对于相同的Exception,如何分辨造成Exception的原因
  • java命名空间java.io接口objectstreamconstants的类成员方法: tc_exception定义及介绍
  • "B_FundMaster.java": Error #: 360 : unreported exception: java.lang.Exception; must be caught or declared to be thrown at line 6
  • java命名空间javax.lang.model.element枚举elementkind的类成员方法: exception_parameter定义及介绍
  • 怪怪的EXCEPTION声明
  • 请问a method能return an exception吗?能写个例子看看吗?
  • linux操作系统的异常类(exception)不支持标准c++?
  • exception-handler parameter表示什么?
  • unreported exception: java.lang.ClassNotFoundException
  • 请问java里能自己定义新的Exception吗?
  • Exception in thread "main"
  • 请问exception类中的方法printStackTrace()是做什么用的?
  • 如何将Exception.printStackTrace()显示出来的内容存到String变量中
  • 这个错误是什么原因Exception in thread "main" java.lang.NoClassDefFoundError:
  • Applet报错:Exception:java.lang.NullPointerException
  • java运行exception问题,急!!!
  • exception in thread main???
  • 关于运行JAVA exception in thread "mian"
  • 为什么会是:) Runtime Exception ,有些看不懂:(
  • 如何熟悉Exception的种类?完全通过学习API的document?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3