我目前正在通过学习《T-SQL Fundamentals Third Edition》这本书来学习SQL Server。书中有这样一句话:
One tricky aspect of the logical value “unknown” is that when you negate it, you still get “unknown”. For example, given the predicate “not (salary > 0)”, when salary is “null”, “salary > 0” evaluates to “unknown”, and “not known” remain “unknown”
我对声明背后的所有逻辑感到有点困惑,只是想知道是否有人能澄清一下?
有人还会添加代码示例吗?
最佳答案
让我们尝试解释一下。 NULL
表示“未知”值(尽管在实践中,它通常表示缺失值)。
当你有一个表达式,如“salary > 0”时,解释是“unknown value”> 0”。这是对还是错?错误!这是“未知”。
当一个或多个操作数为“未知”时,几乎所有逻辑运算符都会产生“未知”。处理查询时,“unknown”被视为 not-True,因此它在功能上等同于 where
或 when
条件中的 false。
类似地,NOT “unknown value”
的计算结果为 。 。 。 “未知”。
此规则的两个重要异常(exception)是 IS NULL
和 IS NOT NULL
。第一个计算结果为 true,第二个计算结果为 false。
一些数据库提供NULL安全
比较(例如,Postgres提供IS DISTINCT FROM
),它将NULL = NULL
视为true。 SQL Server 不提供这样的显式运算符。当您有想要检查 NULL
的逻辑并且您还希望优化器使用索引时,NULL-safe
运算符会很方便。
关于sql - 否定sql中的 "unknown"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207957/