在论 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