sat*_*tya 42 sql sql-server sql-server-2005
我很惊讶地看到IS NULL和= NULL在select查询中产生不同的结果.他们之间有什么区别?什么时候用.如果你能详细解释我,我会很高兴的.
And*_*rey 40
= NULL
总是unknown
(这是3状态逻辑),但WHERE
子句将其视为false
结果集并从结果集中删除.所以NULL
你应该使用IS NULL
这里描述了原因:为什么NULL = NULL在SQL Server中评估为false
Ada*_*Dev 11
要添加到现有答案,取决于使用"= NULL"时是否启用ANSI_NULLS.
-- This will print TRUE
SET ANSI_NULLS OFF;
IF NULL = NULL
PRINT 'TRUE'
ELSE
PRINT 'FALSE'
-- This will print FALSE
SET ANSI_NULLS ON;
IF NULL = NULL
PRINT 'TRUE'
ELSE
PRINT 'FALSE'
Run Code Online (Sandbox Code Playgroud)
IS NULL
和之间存在差异,= NULL
这是因为 SQL 的三值逻辑:
https://en.wikipedia.org/wiki/Null_%28SQL%29#Three-valued_logic_.283VL.29
相关段落摘录:
挑战
Null 因其相关的三值逻辑 (3VL)、在 SQL 连接中使用的特殊要求以及聚合函数和 SQL 分组运算符所需的特殊处理而成为争论的焦点和来源。计算机科学教授 Ron van der Meyden 将各种问题总结为:“SQL 标准中的不一致意味着不可能将任何直观的逻辑语义归因于 SQL 中空值的处理。” 尽管已经提出了各种解决这些问题的建议,但替代方案的复杂性阻碍了它们的广泛采用。
归档时间: |
|
查看次数: |
18380 次 |
最近记录: |