EXCEPT 怎么用不了?

taoistong 2009-04-09 05:49:39
EXCEPT 怎么用不了?
...全文
147 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
iM臭皮匠 2009-04-09
  • 打赏
  • 举报
回复
dingle
htl258_Tony 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sdhdy 的回复:]
引用 6 楼 htl258 的回复:
引用 4 楼 taoistong 的回复:
引用 1 楼 htl258 的回复:
在SQL2005下才能用.


哈哈,其实我就是发个帖子看看怎么发贴,加给分,晚上把这20分给你!

楼主第一次发贴,真是热心人,我第一次是先问问题来着.
对了,如josy所说,EXCEPT要求两个表的表结果要相同


不是表结果,是表结构要相同吧?
[/Quote]
对,是结构,大意了.谢谢.
sdhdy 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 htl258 的回复:]
引用 4 楼 taoistong 的回复:
引用 1 楼 htl258 的回复:
在SQL2005下才能用.


哈哈,其实我就是发个帖子看看怎么发贴,加给分,晚上把这20分给你!

楼主第一次发贴,真是热心人,我第一次是先问问题来着.
对了,如josy所说,EXCEPT要求两个表的表结果要相同
[/Quote]

不是表结果,是表结构要相同吧?
you_tube 2009-04-09
  • 打赏
  • 举报
回复
see see
Rotel-刘志东 2009-04-09
  • 打赏
  • 举报
回复
比较两个查询的结果,返回非重复值。

EXCEPT 从左查询中返回右查询没有找到的所有非重复值。

INTERSECT 返回 INTERSECT 操作数左右两边的两个查询都返回的所有非重复值。

以下是将使用 EXCEPT 或 INTERSECT 的两个查询的结果集组合起来的基本规则:

所有查询中的列数和列的顺序必须相同。


数据类型必须兼容。


Transact-SQL 语法约定

语法

{ <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 操作数左右两边的两个查询均返回的所有非重复值。

备注
如果 EXCEPT 或 INTERSECT 操作数左边和右边的查询返回的可比较列的数据类型是具有不同排序规则的字符数据类型,则根据排序规则优先级的规则执行所需的比较。如果无法执行此转换,Microsoft SQL Server 2005 数据库引擎将返回错误。

通过比较行来确定非重复值时,两个 NULL 值被视为相等。

EXCEPT 或 INTERSECT 返回的结果集的列名与操作数左侧的查询返回的列名相同。

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

EXCEPT 或 INTERSECT 返回的结果集中的任何列的为空性与操作数左侧的查询返回的对应列的为空性相同。

如果 EXCEPT 或 INTERSECT 与表达式中的其他运算符一起使用,则在以下优先顺序的上下文中对其进行评估:

括号中的表达式


INTERSECT 操作数


基于在表达式中的位置从左到右求值的 EXCEPT 和 UNION


如果 EXCEPT 或 INTERSECT 用于比较两个以上的查询集,则数据类型转换是通过一次比较两个查询来确定的,并遵循前面提到的表达式求值规则。

EXCEPT 和 INTERSECT 不能在分布式分区视图定义、查询通知中使用,也不能与 COMPUTE 和 COMPUTE BY 子句一起使用。

EXCEPT 和 INTERSECT 可在分布式查询中使用,但只在本地服务器上执行,不会被推送到链接服务器。因此,在分布式查询中使用 EXCEPT 和 INTERSECT 可能会影响性能。

快速只进游标和静态游标与 EXCEPT 或 INTERSECT 运算一起使用时,在结果集中完全受支持。如果由键集驱动的游标或动态游标与 EXCEPT 或 INTERSECT 运算一起使用,则运算的结果集的游标转换为静态游标。

使用 SQL Server Management Studio 中的图形显示计划功能显示 EXCEPT 运算时,该运算显示为 left anti semi join,INTERSECT 运算显示为 left semi join。
  • 打赏
  • 举报
回复
嘿嘿。偶看看
htl258_Tony 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 taoistong 的回复:]
引用 1 楼 htl258 的回复:
在SQL2005下才能用.


哈哈,其实我就是发个帖子看看怎么发贴,加给分,晚上把这20分给你!
[/Quote]
楼主第一次发贴,真是热心人,我第一次是先问问题来着.
对了,如josy所说,EXCEPT要求两个表的表结果要相同
csdyyr 2009-04-09
  • 打赏
  • 举报
回复
DECLARE @TB TABLE(ID VARCHAR(3))
INSERT @TB
SELECT '001' UNION ALL
SELECT '002' UNION ALL
SELECT '003' UNION ALL
SELECT '005' UNION ALL
SELECT '009'

DECLARE @Ta TABLE(ID VARCHAR(3))
INSERT @Ta
SELECT '001' UNION ALL
SELECT '002'

select * from @tb
except
select * from @ta
/*
ID
----
003
005
009
*/
taoistong 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 htl258 的回复:]
在SQL2005下才能用.
[/Quote]

哈哈,其实我就是发个帖子看看怎么发贴,加给分,晚上把这20分给你!
百年树人 2009-04-09
  • 打赏
  • 举报
回复
在2005上可以用,2000上用不了

另外,EXCEPT要求两个表的表结果要相同
taoistong 2009-04-09
  • 打赏
  • 举报
回复
SF自己坐!
htl258_Tony 2009-04-09
  • 打赏
  • 举报
回复
在SQL2005下才能用.

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧