否定"未知" sql中的值

时间:2016-10-23 21:26:36

标签: sql sql-server tsql

我目前正在学习SQL Server,学习了这本书" T-SQL Fundamentals Third Edition"。在书中,有以下引用:

  

逻辑值“未知”的一个棘手方面是当你   否定它,你仍然得到“未知”。例如,给定谓词   “不是(工资> 0)”,当工资为“null”时,“工资> 0“评估为   “未知”和“未知”仍为“未知”

我对声明背后的所有逻辑感到有些困惑,只是想知道是否有人会澄清一点事情?

有人还会添加代码示例吗?

3 个答案:

答案 0 :(得分:2)

让我们试着解释一下。 NULL表示“未知”值(尽管在实践中,它通常代表缺少值)。

当你有一个诸如“salary> 0”的表达式时,解释是“未知值”> 0“。这是真还是假?错了!这是”未知“。

当一个或多个操作数“未知”时,几乎所有逻辑运算符都会产生“未知”。处理查询时,“unknown”被视为not-True,因此在wherewhen条件下,它在功能上等同于false。

同样,NOT "unknown value"评估为。 。 。 “未知”。

此规则的两个重要例外是IS NULLIS NOT NULL。第一个评估为真,第二个评估为假。

某些数据库提供NULL-safe次比较(例如,Postgres提供IS DISTINCT FROM),将NULL = NULL视为真。 SQL Server不提供这样的显式运算符。当你有想要检查NULL-safe的逻辑并且你也希望优化器使用索引时,NULL运算符可以很方便。

答案 1 :(得分:1)

来自https://msdn.microsoft.com/en-us/library/mt204037.aspx

NULL表示该值未知。空值与空值或零值不同。没有两个空值相等。两个空值之间或空值与任何其他值之间的比较返回未知,因为每个NULL的值都是未知的。

使用NULL值正常工作,使用" IS NULL",你不能用任何东西比较NULL值,因为它总是满足contidition(即(NULL值< 0)为真,并且( NULL值> 0)为真)

答案 2 :(得分:0)

"未知"是两个操作数的结果。操作数可以是NULL。

简单的术语

NULL是操作数。

未知不是操作数

未知可能是两个操作数的结果

请参阅以下链接。很少有表格可以给出泥潭的细节差异。 https://msdn.microsoft.com/en-us/library/mt204037.aspx