所以我有一个关于考试作业的问题,在这个作业中我们有一堆布尔表达式,例如:
FALSE OR NULL = NULL
然后我们需要写出布尔表达式的值。为此,我使用了三值逻辑,但是当您获得如下布尔表达式时,它如何应用:
(NULLL AND TRUE) OR FALSE
or
(NULL AND NULL) OR TRUE
第一个可以通过三值逻辑很容易找到,但是我如何找出另外两个。
我知道,这是一个非常基本的问题,但我对此仍然陌生。
提前致谢
您需要布尔值的三相真值表AND
and OR
:
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
该表是缩写的,依赖于以下的交换性质AND
and OR
在布尔逻辑中。在大多数 SQL 变体中,UNKNOWN
and NULL
是等价的。用简单的英语来说,如果即使仅使用部分信息也可以知道该值,则提供该值。例如X OR Y
总是true if X
为真,无论 Y 是否已知,也无论它取什么值。相似地,X AND Y
总是false if X
为假,无论 Y 是否已知,也无论它取什么值。这些是关于布尔运算符的引理,并且在入门集合论等地方进行了教授。
一旦有了这些真值表,您就可以在不存在括号时遵循 SQL 运算符的正确优先顺序来计算表达式。
这是您的示例之一的评估链:
-
(NULL AND TRUE) OR FALSE
(NULL) OR FALSE
NULL OR FALSE
NULL
See 维基百科的三值逻辑条目:SQL中的应用 https://en.wikipedia.org/wiki/Three-valued_logic#Application_in_SQL了解更多。
最后一点:NULL
永远不等于NULL
,因为您无法知道两个未知值实际上是否彼此相等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)