WEB开发网
开发学院数据库MSSQL Server SQL Server 2005总结:EXCEPT和INTERSECT运算符 阅读

SQL Server 2005总结:EXCEPT和INTERSECT运算符

 2008-08-26 09:56:08 来源:WEB开发网   
核心提示:1.简介 EXCEPT和INTERSECT运算符使您可以比较两个或多个SELECT语句的结果并返回非重复值,2.区别EXCEPT运算符返回由EXCEPT运算符左侧的查询返回、而又不包含在右侧查询所返回的值中的所有非重复值,SQL Server 2005总结:EXCEPT和INTERSECT运算符,INTERSECT返回

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个表,分别插入数据

 createtableTableA(col1int)
  insertintoTableAselect1
  insertintoTableAselect1
  insertintoTableAselect2
  insertintoTableAselect3
  insertintoTableAselect4
  insertintoTableAselect4
  insertintoTableAselect5
  insertintoTableAselectnull
  insertintoTableAselectnull
  createtableTableB(col2int)
  insertintoTableBselectnull
  insertintoTableBselect1
  insertintoTableBselect2
  insertintoTableBselect3
  createtableTableC(col3int)
  insertintoTableCselect1
  insertintoTableCselect5
  insertintoTableCselect6

--利用EXCEPT

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

  SELECTcol1FROMTableA
  EXCEPT
  SELECTcol3FROMTablec

结果如下:

col1

-----------

NULL

2

3

4

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

  SELECTcol1
  FROMTableAasa
  wherenotexists(SELECTcol3FROMTablecwherea.col1=col3)
  groupbycol1

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

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

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

--使用IN或NOT IN比较后返回的所有空值都将返回UNKNOWN。

--将空值与IN或NOT IN一起使用会产生意外结果。

   SELECTcol1
  FROMTableA
  wherecol1notin(SELECTcol3FROMTablec)
  groupbycol1

结果如下:

col1

-----------

2

3

4

--INTERSECT运算符优先于EXCEPT

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

  SELECTcol1FROMTableA
  EXCEPT
  SELECTcol2FROMTableB
  INTERSECT
  SELECTcol3FROMTableC

结果如下:

col1

-----------

NULL

2

3

4

5

--SELECT INTO的应用

--SELECT INTO必须是语句中的第一个查询

--我记得SELECT INTO与UNION运算符的使用也是这样的规则 

 SELECTcol1
  into#tem
  FROMTableA
  EXCEPT
  SELECTcol3
  FROMTablec
  select*from#tem
  droptable#tem

结果如下:

col1

-----------

NULL

2

3

4

--ORDER BY子句

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

 SELECTcol1FROMTableA
  INTERSECT
  SELECTcol3FROMTableC
  orderbycol1

结果如下:

col1

-----------

1

5

Tags:SQL Server 总结

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接