为何含NULL的AND、OR运算真值表是这样的?三值逻辑解析
MySQL三值逻辑(3VL)中AND/OR与NULL的运算规则解析
真值表参考

三值逻辑的核心运作逻辑
SQL采用的三值逻辑(3VL)里,NULL代表未知值,不属于布尔值的真/假范畴,运算结果需基于「未知值参与逻辑运算时的可能性」推导:
AND运算规则
AND运算要求两边同时为真时结果才为真,只要任意一边为假,结果就确定为假:
FALSE AND NULL:AND运算只要有一个操作数为假,无论另一个值是什么,结果必然为假——哪怕NULL是未知,也无法改变「已有一个假」的事实,因此返回FALSE。TRUE AND NULL:结果完全取决于未知的NULL,若NULL为真则结果为真,若为假则结果为假,整体结果无法确定,返回NULL。NULL AND NULL:两个操作数都是未知,最终结果无法判定,返回NULL。
OR运算规则
OR运算只要任意一边为真,结果就为真:
TRUE OR NULL:已有一个操作数为真,无论NULL是什么,结果必然为真,返回TRUE。FALSE OR NULL:结果取决于未知的NULL,若NULL为真则结果为真,若为假则结果为假,整体结果无法确定,返回NULL。NULL OR NULL:两个操作数都是未知,最终结果无法判定,返回NULL。
测试验证SQL
可执行以下SQL语句直接验证上述规则:
SELECT 'AND' AS op, TRUE AND NULL, FALSE AND NULL, NULL AND NULL UNION ALL SELECT 'OR' AS op, TRUE OR NULL, FALSE OR NULL, NULL OR NULL;
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

