未知的SQL与NULL相同吗?



我很困惑 UNKNOWN 在 3 个值逻辑中的 SQL 中是什么意思。这实际上意味着空吗?NULL 和 UNKNOWN 在所有布尔上下文中都可以互换,这是真的吗?

简单的答案:

3 == 2 => FALSE
3 == 3 => TRUE
NULL == 3 => UNKNOWN
3 == NULL => UNKNOWN
NULL == NULL => UNKNOWN

两侧或两侧都有NULL的表达式的计算结果为UNKNOWN

例如,如果您有一个表:

Employees(id, country)
1, USA
2, USA
3, Canada
4, NULL

假设您的老板要求您选择所有不居住在美国的员工。你写:

select * from Employees
where country <> 'USA'

并获得:

3, Canada

为什么没有选择 4?因为WHERE子句中只返回表达式计算结果为TRUE的行:

1. USA <> 'USA' => FALSE -- don't return this row
2. USA <> 'USA' => FALSE -- don't return this row
3. CANADA <> 'USA' => TRUE -- return this row
4. NULL <> 'USA' => UNKNOWN -- don't return this row

它不仅是为了平等或不平等。对于任何谓词

根据维基百科:

NULL BOOLEAN 和 UNKNOWN"可以互换使用,表示完全相同的事情">

但是,某些数据库系统实际上并没有实现SQL的布尔数据类型(它是可选的),并且在大多数这些系统中,不存在在同一上下文中同时遇到UNKNOWNNULL的情况 -UNKNOWN仅在计算谓词时出现。

您可以使用各种工具来尝试消除NULL,例如COALESCEIS [NOT] NULL.其中大多数不能用于计算谓词的上下文,因此永远不会与UNKNOWN值一起使用。例如,如果您有以下查询:

SELECT
*
FROM
TableA
WHERE A = 'B'

并且您知道有一些NULLA值因此导致WHERE子句谓词产生UNKNOWN,您不能写:

SELECT
*
FROM
TableA
WHERE COALESCE(A = 'B',TRUE)

消除UNKNOWN.

阅读此链接希望对您有所帮助

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

相关内容

  • 没有找到相关文章

最新更新