我主要有应用程序开发背景。在编程语言variable == null
或variable != null
工作。
对于SQL,以下查询不会给出任何语法错误,但也不会返回正确的结果。
select SomeColumn from SomeTable where SomeNullableColumn=null
select SomeColumn from SomeTable where SomeNullableColumn<>null
为什么我们需要使用is null
或is not null
编写查询以获得正确的结果?
select SomeColumn from SomeTable where SomeNullableColumn is null
select SomeColumn from SomeTable where SomeNullableColumn is not null
is null
或is not null
而不是=null
或<>null
背后的原因/要求是什么?
这是ANSI SQL还是Microsoft的TSQL标准?
答案 0 :(得分:2)
因为null
不等于null
,例如NaN
(&#34;不是数字&#34;例如,当0除以0或者被提升为0的幂不等于NaN
。将null
视为未知值(未知值不一定等于某个未知值)。
答案 1 :(得分:1)
因为sql基于集合论和谓词逻辑。这两个强大的数学基础包含数学逻辑 - Boolean algebra
。在这个逻辑中存在三个值 - TRUE, FALSE and UNKNOWN (=NULL)
。
Is null
代替= null
来分隔逻辑。为什么它符合ANSI标准?它是为了使它更具可读性和独立的三值逻辑。
在常见的数据仓库中,null替换为&#39;&#39;使qry更简单。
或尝试SET ANSI_NULLS OFF
选项。