在 SQL 中,NULL
表示“未知值”。
如果您说 x != NULL 您是在说“x 的值不等于未知值”。好吧,因为我们不知道未知值是什么,所以我们不知道 x 是否等于它。所以答案是“我不知道”。
相似地:
x = NULL OR 1=2 -- Unknown. 1=2 is not true, but we don't know about x=NULL
x = NULL OR 1=1 -- True. We know that at least 1=1 is true, so the OR is fulfulled regardless.
x = NULL AND 1=1 -- Unknown. We want them both to be true to fulful the AND
x = NULL AND 1=2 -- False. We know 1=2 is false, so the AND is not fulfilled regardless.
还
-- Neither statement will select rows where x is null
select x from T where x = 1
select x from T where x != 1
检查空值的唯一方法是特别询问“我们是否真的不知道 x 的值是什么”。那有一个是或否的答案,并使用IS
关键字。
如果您只想将空值视为零或其他值,则可以使用COALESCE
orISNULL
函数。
COALESCE(NULL, 1) -- 1
COALESCE(NULL, NULL, 1) -- Also 1
COALESCE(x, y, z, 0) -- x, unless it is null, then y, unless it is null, then z, unless it is null in which case 0.