这两个是SQL 2005增加的新语法,很有意思的。有兴趣的朋友可以参考
http://msdn.microsoft.com/zh-cn/library/ms188055(SQL.90).aspx
比较两个查询的结果,返回非重复值。
EXCEPT 从左查询中返回右查询没有找到的所有非重复值。
INTERSECT 返回 INTERSECT 操作数左右两边的两个查询都返回的所有非重复值。
以下是将使用 EXCEPT 或 INTERSECT 的两个查询的结果集组合起来的基本规则:
- 所有查询中的列数和列的顺序必须相同。
- 数据类型必须兼容。
语法
{ <query_specification> | ( <query_expression> ) } { EXCEPT | INTERSECT } { <query_specification> | ( <query_expression> ) }
参数
- <query_specification> | ( <query_expression> )
-
查询规范或查询表达式返回与来自另一个查询规范或查询表达式的数据相比较的数据。在 EXCEPT 或 INTERSECT 运算中,列的定义可以不同,但它们必须在隐式转换后进行比较。如果数据类型不同,则用于执行比较并返回结果的类型是基于数据类型优先级的规则确定的。
如果类型相同,但精度、小数位数或长度不同,则根据用于合并表达式的相同规则来确定结果。有关详细信息,请参阅 精度、小数位数和长度 (Transact-SQL)。
查询规范或表达式不能返回 xml、text、ntext、image 或非二进制 CLR 用户定义类型列,因为这些数据类型不可比较。
- EXCEPT
-
从 EXCEPT 操作数左边的查询中返回右边的查询未返回的所有非重复值。
- INTERSECT
-
返回 INTERSECT 操作数左右两边的两个查询均返回的所有非重复值。