TSQL查询笔记3:三值逻辑

在SQL中谓词(逻辑表达式)的可能取值有TRUE、FALSE和UNKNOWN,这就是所谓的三值逻辑。

UNKNOWN逻辑通常出现在涉及NULL值的逻辑表达式中,NULL代表一种缺失的值,当把一个缺失的值和另一个值(这个值也可能是NULL)进行比较时,逻辑结果总是UNKNOWN。

查询筛选器(ON WHERE HAVING)都把UNKNOWN当作FALSE处理,使筛选器取值为UNKNOWN的行会被排除在结果集之外。而 CHECK结束中的UNKNOWN被当作FALSE对待,如表中一个CHECK结束要求某列大于0,向该列插入NULL值也会成功,因为 NULL>0等于UNKNOWN。

在筛选器中比较两个NULL值将得到UNKNOWN,而在UNIQUE结束、集合运算(如UNION和EXCEPT)、排序和分组操作中,认为两个NULL值相等:
1,如果表中一列定义了UNIQE 约束,将无法向表中插入两行NULL值。
2,GROUP BY子句会将所有NULL分到一组。
3,ORDER BY子句会将所有NULL排列在一起。
4,当比较两个集合中的行时,集合运算符认为两个NULL值相等。

原文地址:https://www.cnblogs.com/gdjlc/p/2376404.html