SQL unknown 是否与 NULL 相同?

Is SQL unknown identical to NULL?

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

根据Wikipedia

NULL BOOLEAN and UNKNOWN "may be used interchangeably to mean exactly the same thing"

然而,一些数据库系统实际上并没有实现 SQL 的布尔数据类型(它是可选的)并且在大多数这些系统中,您不会遇到这两种情况 UNKNOWNs 和 NULLs 在同一上下文中 - UNKNOWNs 仅在评估谓词时出现。

您可以使用多种工具来尝试消除 NULL,例如 COALESCEIS [NOT] NULL。其中大部分不能在评估谓词的上下文中使用,因此永远不会与 UNKNOWN 值一起使用。例如。如果您有这样的查询:

SELECT
    *
FROM
    TableA
WHERE A = 'B'

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

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

消除UNKNOWN.

简单回答:

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

两边或两边带有 NULL 的表达式的计算结果为 UNKNOWN

例如,如果您有 table:

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

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

select * from Employees
where country <> 'USA'

并得到:

3, Canada

为什么 4 没有 selected?因为在 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

不只是为了平等或不平等。对于任何 predicate

阅读此文link希望对您有所帮助

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