为什么SQL语言使用IS NULL或IS NOT NULL而不是= NULL或<>空值?

时间:2016-12-01 18:45:03

标签: sql-server tsql

我主要有应用程序开发背景。在编程语言variable == nullvariable != null工作。

对于SQL,以下查询不会给出任何语法错误,但也不会返回正确的结果。

select SomeColumn from SomeTable where SomeNullableColumn=null
select SomeColumn from SomeTable where SomeNullableColumn<>null

为什么我们需要使用is nullis not null编写查询以获得正确的结果?

select SomeColumn from SomeTable where SomeNullableColumn is null
select SomeColumn from SomeTable where SomeNullableColumn is not null

is nullis not null而不是=null<>null背后的原因/要求是什么?

这是ANSI SQL还是Microsoft的TSQL标准?

2 个答案:

答案 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选项。