SQL Server 2005目前支持三种集合操作:UNION、ExCEPT和INTERSECT.而SQL SERVER 2000只支持UNION。集合操作在两个输入中比较全部行。UNION返回包含两个输入中所有行的结果集。如果未指定ALL选选,UNION将从结果集中移除重复行。EXCEPT返回出现在左输入但未出现在右输入的不重复行。INTERSECT返回在两个输入中都出现过的不重复行。
集合操作的逻辑处理阶段中ORDER BY不能用于不能用于集合操作的单个查询中。我们只能在查询的最后制定ORDER BY子句,但它将于用于集合操作的结果集。
例如表A数据如下图:
使用EXCEPT的语句select * from dbo.A EXCEPT select *from dbo.A where Field_K <3 order by Field_K desc
使用INTERSECT的情况select * from dbo.A intersect select *from dbo.A where Field_K <3 order by Field_K desc
有此可以发现,我们在使用not in的时候可以用EXCEPT来实现,not in效率低,会使索引失效。