[转载]在论 EXISTS作用

[转载]在论 EXISTS作用 – 361741352 – 博客园.

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

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏