=============================================================================
NULL代表的是未知,因此以下的比较结果也是未知
NULL = 1
NULL <> 1
NULL > 1
NULL = NULL
但是对于where,having,case when中的比较表达式来说,要求为true才可以,未知不行
因此在这些字句中,如果想和null比较,需要使用 is null / is not null
=============================================================================
在逻辑操作 (and, or)中,也可能会出现NULL参与
(NULL = 1) OR (1 = 1) - True
(NULL = 1) AND (0 = 1) - False
NULL取任意值,不会对影响整个表达式的结果。
对一个未知数进行and, or, not操作,结果仍然是未知数
=============================================================================
SELECT col
FROM t
WHERE col = NULL
OR NOT (col = NULL)
对于这个例子来说,未知与未知相或操作,结果仍然是未知,因为是在where条件中,所以不会有输出
=============================================================================
WHERE 1 NOT IN (NULL, 2) -> Unknown
WHERE 1 NOT IN (NULL, 1) -> False
WHERE 1 IN (NULL, 2) -> Unknown
WHERE 1 IN (NULL, 1) -> True
在In列表中,不要包含NULL
考虑使用not exists来替代not in,或者是在子查询中用where条件过滤掉null值
CREATE TABLE t (
a INT CHECK (a >= 0),
b INT CHECK (b >= 0),
CHECK ( a + b <= 10 )
);
insert into t values(null,11);
insert into t values(11,null);
对于check约束而言,接受unknow的情况
===========================================================================