7

我刚刚发现你可以写类似的东西

SELECT NULL IS UNKNOWN

哪个返回1

还有其他地方可以使用UNKNOWN吗?它似乎不是关键字(不能做SELECT UNKNOWN)。NULL IS NULL也是如此,那么有什么目的UNKNOWN呢?

4

4 回答 4

10

UNKNOWN只是BOOLEAN NULL...的TRUE别名_ _ _ _1FALSE0BOOLEANTINYINT(1)

为什么它甚至在那里?因为它是 SQL-92 标准的一部分:

<truth value> ::=
                TRUE
              | FALSE
              | UNKNOWN

为什么你可以SELECT NULL,,,SELECT TRUESELECT FALSE不行SELECT UNKNOWN?可能只是一个错误,因为UNKNOWN直到更新版本的 MySql 才支持它本身

于 2013-02-28T00:00:48.860 回答
2

在我看来,在 MySQL 中,UNKNOWN是 的别名NULL,用于布尔意义。

我可以找到这个参考:

在 SQL 中,所有逻辑运算符的计算结果为 TRUE、FALSE 或 NULL (UNKNOWN)。

MySQL 文档 - 12.3.3。逻辑运算符

有关一般 SQL NULL 和 UNKNOWN 的更多信息:

当受 NOT NULL 约束时,SQL BOOLEAN 的工作方式与其他语言中的布尔类型类似。然而,不受限制,BOOLEAN 数据类型,尽管它的名字,可以保存真值 TRUE、FALSE 和 UNKNOWN,所有这些都根据标准定义为布尔文字。该标准还断言 NULL 和 UNKNOWN “可以互换使用以表示完全相同的事物”。

维基百科上的 NULL

于 2013-02-27T23:27:36.060 回答
1

它的唯一用途是描述一个没有已知值的布尔值。就像第一个例子说的那样,它相当于NULL.

于 2013-02-27T23:25:28.203 回答
0

当比较涉及 NULL 时,在这种情况下,unknown就会出现。

例如,考虑以下查询:

select* from tbl
where x>5

在这里,假设某些元组可能包含列的空值x。现在,在评估每个元组时:

  1. 如果 x 不为空且 x>5,则表达式的x>5计算结果为 true
  2. 如果 x 为非空且 x<=5,则表达式的x>5计算结果为 false
  3. 但是如果 x 为 null,那么表达式的x>5计算结果是什么?(答案未知)

对于案例 3,说真假中的任何一个都是错误的。因此,为了处理 case-3,sql 中存在另一个逻辑值,即unknown.
(因此,sql中有3个逻辑值:真、假、未知)

现在,规则是:

如果一个元组的 where 子句谓词计算结果为 false 或 unknown,则该元组不会添加到结果中。

因此,对于上面的例子,只有 case-1 元组会被添加到结果中。

这样,SQL 在内部玩弄着unknown。

此外,当 where 子句谓词涉及多个逻辑表达式时,我们会得到一些结果:

  • 表达式的结果true and unknownunknown
  • 表达式的结果false and unknownfalse
  • 表达式的结果unknown and unknownunknown
  • 表达式的结果true or unknowntrue
  • 表达式的结果false or unknownunknown
  • 表达式的结果unknown or unknownunknown
  • 表达式的结果not unknownunknown
于 2021-08-30T12:54:54.677 回答