一个理论问题…
当触发以下给出的一组查询时,则…
Create table Temp1(C1 varchar(2)) Create table Temp2(C1 varchar(2)) insert into Temp1 Values('A'),(NULL),('B') insert into Temp2 Values('B'),(NULL),('C'),(NULL) select *from Temp1 A,Temp2 B where A.C1 <> B.C1
给…
我A.C1 <> B.C1在Where子句中使用过。
A.C1 <> B.C1
Where
但是我希望…
为了获得预期的结果作为输出,我需要ISNULL(A.C1,'') <> ISNULL(B.C1,'')在Where子句中使用。
ISNULL(A.C1,'') <> ISNULL(B.C1,'')
我的问题是,为什么我需要ISNULL每次都使用它来获得预期的输出,因为NULL它不等于任何字符串数据。
ISNULL
NULL
从这里引用是完美的:
理解NULL的正确方法是它不是一个值。不是“他的值是NULL值”,而是“他的NULL值不是值。”所有东西都是值,或者不是。当某物是价值时,它是“ 1”,“”,“鈥”或“ $ 5.00”等,但是当某物不是“值时,它就是”。檛什么都没有。SQL通过特殊的非值NULL表示``他没有值’‘。当有人说“他的NULL值”时,应该在精神上不同意,因为没有这样的事情。NULL表示完全不存在任何值。
空不等于任何东西,因此比较总是失败。
例如,尝试以下查询:
select * from Temp2 B where B.C1 = null
它不会返回任何行!
必须使用is null或的句柄为null is not null:
is null
is not null
select * from Temp1 A, Temp2 B where A.C1 <> B.C1 or (A.C1 is null and B.C1 is not null) or (B.C1 is null and A.C1 is not null)
返回与查询ISNULL返回的值完全相同的值。