否定;“未知”;sql中的值
我目前正在通过学习《T-SQL基础知识第三版》一书来学习SQL Server。书中有以下引文: 逻辑值“未知”的一个棘手方面是 否定它,你仍然会得到“未知”。例如,给定谓词 “不是(薪资>0)”,当薪资为“空”时,“薪资>0”的计算结果为 “未知”和“未知”仍然是“未知” 我对这句话背后的逻辑有点困惑,只是想知道是否有人能澄清一下 有人还会添加代码示例吗?未知”是两个操作数的结果。并且操作数可以是NULL 简单术语 空值是操作数。 未知不是操作数 未知可能是两个操作数的结果 请参考下面的链接。很少有表格能给出详细的区别。 来自 NULL表示该值未知。空值与空值或零值不同。没有两个空值相等。两个空值之间或空值与任何其他值之间的比较返回unknown,因为每个空值的值都是未知的否定;“未知”;sql中的值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我目前正在通过学习《T-SQL基础知识第三版》一书来学习SQL Server。书中有以下引文: 逻辑值“未知”的一个棘手方面是 否定它,你仍然会得到“未知”。例如,给定谓词 “不是(薪资>0)”,当薪资为“空”时,“薪资>0”的计算结果为 “未知”和“未知”仍然是“未知” 我对这句话背后的逻辑有点困惑,只是想知道是否有人能澄清一下 有人还会添加代码示例吗?未知”是两个操作数的结果。并且操作数可以是NULL 简单术语 空值是操作数。 未知不是操作数 未知可能是两个操作数的结果 请参考下面的链接。很
要正确处理空值,请使用“IS NULL”,您不能将空值与任何值进行比较,因为它始终满足以下条件(即,(NULL值<0)为true,(NULL值>0)为true)让我们尝试解释一下
NULL
表示“未知”值(尽管在实践中,它通常表示缺少的值)
当您有一个表达式如“工资>0”时,解释为“未知值”>0。这是对的还是错的?错!这是“未知”
当一个或多个操作数为“未知”时,几乎所有逻辑运算符都会生成“未知”。在处理查询时,“未知”被视为非真,因此在where
或when
条件下,它在功能上等同于false
类似地,非“未知值”
的计算结果为…“未知”
此规则的两个重要例外是为空
和不为空
。第一个计算结果为真,第二个计算结果为假
一些数据库提供了
NULL-safe
比较(例如,Postgres提供的不同于),它将NULL=NULL
视为true。SQL Server不提供此类显式运算符。NULL-safe
运算符可以在逻辑上方便地检查NULL
s,并且希望优化器使用索引。只需创建一个包含一些正值、负值和NULL值的测试表。然后运行SELECT…WHERE v>0
和SELECT…WHERE NOT(v>0)
。您将看到它是如何工作的。在这两种变体中,您的空值都不会被选择。这是一个措辞非常糟糕的示例。如果“salary>0”的计算结果为“unknown”,那么“notunknown”将是“known”“…@VladimirBaranov你的评论帮助我理解了这个概念!非常感谢你@zlk这也不是书上说的。