【问题标题】:Null values - boolean expression空值 - 布尔表达式
【发布时间】:2017-06-01 23:54:41
【问题描述】:

所以我有一个关于考试作业的问题,在这个作业中,我们有一堆布尔表达式,例如:

FALSE OR NULL = NULL

然后我们期望写入布尔表达式的值。为此,我使用了三值逻辑,但是当您获得如下布尔表达式时,它如何应用:

(NULLL AND TRUE) OR FALSE

(NULL AND NULL) OR TRUE

第一个很容易通过三值逻辑找到,但是我如何找出另外两个。

我知道这是一个非常基本的问题,但我对此还是个新手。

提前致谢

【问题讨论】:

  • 数据库很多,可以直接查。在 MySQL 中,例如:select false 或 null 计算结果为 null。

标签: sql null boolean


【解决方案1】:

您需要布尔值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 为真,则X OR Y 始终为true,无论Y 是否已知,也不管其取值如何。同样,如果 X 为假,无论 Y 是否已知,也不管它取什么值,X AND Y 总是 false。这些是布尔运算符的引理,在介绍性集合论等地方都有教授。

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

这是您的一个示例的评估链:

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

请参阅Wikipedia's Three-valued logic entry:Application in SQL 了解更多信息。

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

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 2010-09-21
    • 2015-08-18
    • 2011-05-11
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多