在论 EXISTS作用

EXISTS 

  作用

    检查查询中是否产生某些行。返回true 或者false。

注意

  1 无论查询是否返回行,EXISTS都不会返回UNKNOWN.

下面查询返回来自Spain并且发生过订单的消费者,

SELECT CustomerID, CompanyName

FROM dbo.Customers AS C

WHERE Country = N'Spain'

AND EXISTS

(

  SELECT * FROM Orders AS O

WHERE O.CustomerID = C.CustomerID

)

 

三值逻辑

如果考虑三值逻辑则EXISTS 和 in就会有一个区别

当输入列表包含null时,in实际上会产生一个UNKNOWN的逻辑结果,

例如 IN(a,b,null) 的结果是UNKNOWN 帅选器中UNKNOWN的处理与false类似,使用in谓词查询结果和EXISTS的查询结果是一样的,而优化器知道这一点,所以产生相同的执行计划,

 

not EXISTS 和 NOT IN

假如你要查询来自Spain 且没有订单的消费者,下面使用NOT EXISTS

SELECT CustomerID,CompanyName

FROM dbo.Customers as c

where Country = 'Spain'

and not exists

(

  select * from Orders as o

where O.CustomerID = C.CustomerID

)

二者之间的差异

当查询列表中包含null 如 not(a,b,c,null)此时NOT IN查询总是返回一个空集。因为谓词val in(val1,val2,.....null)只返回 not true 和not unknown,不返回TRUE.

 

 

缺失 最小值的解决方法

 

逆反逻辑在写sql程序中的应用。

 

不常用的谓词

some  any  all

posted on 2012-06-12 22:09  361741352  阅读(932)  评论(0编辑  收藏  举报

导航