SQL含A值NULL与I值NULL的四值逻辑AND真值表问询
SQL中含A值NULL与I值NULL的四值逻辑AND运算真值表
Codd曾提出将SQL中的NULL拆分为两种不同语义的空值,以此构建四值逻辑:
- A值NULL:代表「值缺失但适用」,比如必填字段未填写的情况
- I值NULL:代表「值不适用」,比如男性的怀孕状态这类本身就不存在对应值的场景
四值逻辑包含四个真值:True、False、A-NULL、I-NULL,以下是对应的AND运算真值表,先给出已知的三值逻辑AND表作为对比:
三值逻辑(3VL)AND运算真值表
| AND | True | False | NULL |
|---|---|---|---|
| True | True | False | NULL |
| False | False | False | False |
| NULL | NULL | False | NULL |
四值逻辑(4VL)AND运算真值表
| AND | True | False | A-NULL | I-NULL |
|---|---|---|---|---|
| True | True | False | A-NULL | I-NULL |
| False | False | False | False | False |
| A-NULL | A-NULL | False | A-NULL | A-NULL |
| I-NULL | I-NULL | False | A-NULL | I-NULL |
核心运算规则
- False主导:只要任意一个操作数为False,AND运算结果必为False
- 空值优先级:A-NULL与I-NULL进行AND运算时,结果为A-NULL——因为A-NULL代表的「本应存在却缺失」的不确定性,优先级高于「本身不适用」的I-NULL
- 同类型空值运算:两个A-NULL或两个I-NULL进行AND运算,结果保持原空值类型
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

