MySQL NULL--三值逻辑(Three Value Logic)

Posted gaogao67

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL NULL--三值逻辑(Three Value Logic)相关的知识,希望对你有一定的参考价值。

三值逻辑(Three Value Logic)

在关系型数据库中,由于NULL值的存在,导致逻辑表达式存在三种值:TRUE/FALSE/UNKNOW。

SELECT 
999=NULL AS C1,
999=111 AS C2,
999=999 AS C3;

+------+----+----+
| C1   | C2 | C3 |
+------+----+----+
| NULL |  0 |  1 |
+------+----+----+
1 row in set (0.00 sec)

NULL值表示不确定或未知的值,因此NULL值是否等于或不等于某个特定值,只能使用IS NULL或IS NOT NULL来判断。

 

NULL值处理

在大部分场景中,NULL值不等于任何值包括NULL值,但在下列场景中设定NULL值相等:

1、对于唯一索引,仅允许唯一索引列存在一个NULL值。

2、对于GROUP BY和DISTINCT操作,所有NULL值当做同一组处理。

3、对于ORDER BY操作,所有NULL值被当做"最小值"排序在一起。

 

UNKNOW值处理

对于逻辑表达式计算后得到的UNKNOW值,在不同场景中处理方式不同:

1、在WHERE/ON/HAVING三类筛选操作中,UNKNOW值被当做FALSE处理。

2、在CHECK约束中,UNKNOW值被当做TRUE处理,CHECK约束仅对CHCK表达式为FALSE的记录返回错误。

 

以上是关于MySQL NULL--三值逻辑(Three Value Logic)的主要内容,如果未能解决你的问题,请参考以下文章

读SQL进阶教程笔记02_三值逻辑和NULL

关于SQLSQL Server的三值逻辑简析

SQL Server中奇妙的NULL

洛谷 P1459 三值的排序 Sorting a Three-Valued Sequence

Sorting a Three-Valued Sequence(三值的排序)

Delphi中的三值逻辑