2017-06-01 83 views
0

所以我有关于考试分配的问题,在这项任务,我们有像一堆布尔表达式:Null值 - 布尔表达式

FALSE OR NULL = NULL 

然后我们预计要写入的值布尔表达式。要做到这一点,我利用了三值逻辑的,但如何,当你得到一个布尔表达式如下应用:

(NULLL AND TRUE) OR FALSE 

(NULL AND NULL) OR TRUE 

第一个很容易被发现通过三值逻辑,但我怎么弄出另外两个。

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

在此先感谢

+0

有了很多数据库,你可以直接找到。在MySQL中,例如:select false或null评估为null。 –

回答

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 OR Y始终为为真如果X为真,无论Y是否已知且无论其值如何。同样,X AND Y始终为false如果X为假,无论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,因为您无法知道两个未知值是否实际上彼此相等。

+0

谢谢,你真的说得很清楚,非常感谢! – user1845777