这也可能是其他数据库中的情况,但是当您进行以下查询时
SELECT * FROM MyTbl WHERE MyColumn != 'Foo'
然后获取 MyColumn 为“Bar”的任何记录,但未获取 MyColumn 为 NULL 的任何记录。我认为这是预期的行为,并且背后有原因,我想知道原因。
NULL 是否被认为等于 'Foo' 或者它只是不期望成为条件的一部分,因为条件 (NULL != 'Foo') 似乎为真。
这也可能是其他数据库中的情况,但是当您进行以下查询时
SELECT * FROM MyTbl WHERE MyColumn != 'Foo'
然后获取 MyColumn 为“Bar”的任何记录,但未获取 MyColumn 为 NULL 的任何记录。我认为这是预期的行为,并且背后有原因,我想知道原因。
NULL 是否被认为等于 'Foo' 或者它只是不期望成为条件的一部分,因为条件 (NULL != 'Foo') 似乎为真。
在 DB 逻辑中,NULL
意味着该字段中根本没有定义的数据。它被认为与任何事物都不相同或不同。如果要获取相关行,则必须对其进行显式过滤:
SELECT * FROM MyTbl WHERE MyColumn != 'Foo' OR MyColumn IS NULL
参见维基百科。
在 SQL Server 中工作的三态逻辑,这意味着NULL = NULL UNKNOWN which treats as FALSE
在所有关系数据库中,空值不等于任何东西,包括它自己。
即使您的查询是 ,您也无法找到 MyColumn 具有空值的行"select * from MyTbl where MyColumn = null"
。获得它们的唯一方法是"select * from MyTble where MyColumn is null"
有关详细说明,请参阅http://en.wikipedia.org/wiki/Null_(SQL )
是的,正如 Tim 所说,NULL 值是未知的。SQL Server 不会为了进行匹配而对 NULL 值做出假设。您可以查看有关 SQL Server 如何处理 NULL 的更多信息。