空值 - 布尔表达式

时间:2017-06-01 23:54:42

标签: sql null boolean

所以我对考试作业有疑问,在这个作业中我们有一堆布尔表达式,如:

FALSE OR NULL = NULL

然后我们应该写出布尔表达式的值。要做到这一点,我正在使用三值逻辑,但是当你得到如下布尔表达式时,它是如何应用的:

(NULLL AND TRUE) OR FALSE

(NULL AND NULL) OR TRUE

第一个可以通过三值逻辑轻松找到,但我如何找出其他两个。

非常基本的问题,我知道,但我仍然是新手。

提前致谢

1 个答案:

答案 0 :(得分:5)

您需要布尔ANDOR的三阶段真值表:

OPERAND1  OPERATOR  OPERAND2  RESULT
------------------------------------
TRUE      AND       TRUE      TRUE
TRUE      AND       FALSE     FALSE
FALSE     AND       FALSE     FALSE
TRUE      AND       NULL      UNKNOWN
FALSE     AND       NULL      FALSE
NULL      AND       NULL      UNKNOWN
TRUE      OR        TRUE      TRUE
TRUE      OR        FALSE     TRUE
FALSE     OR        FALSE     FALSE
TRUE      OR        NULL      TRUE
FALSE     OR        NULL      UNKNOWN
NULL      OR        NULL      UNKNOWN

此表是缩写的,依赖于布尔逻辑中ANDOR的可交换属性。在大多数SQL变体中,UNKNOWNNULL是等效的。用简单的英语,如果即使部分信息也可以知道该值,则提供它。例如,如果X OR Y为真,则X始终为 true ,无论Y是否已知且无论其值是多少。同样,如果X AND Y为false,则X始终为 false ,无论Y是否已知且无论其值是多少。这些是布尔运算符的引理,并在介绍集合理论和其他地方教授。

一旦有了这些真值表,就可以在括号不存在时遵循SQL运算符的正确优先顺序来计算表达式。

以下是您的一个示例的评估链:

  • (NULL AND TRUE) OR FALSE
  • (NULL) OR FALSE
  • NULL OR FALSE
  • NULL

有关详情,请参阅Wikipedia's Three-valued logic entry:Application in SQL

最后一点注意:NULL永远不会等于NULL,因为您无法知道两个未知值是否实际上彼此相等。