SQL中的NULL

特殊的未知值

NULL不是0,也不是’'空字符串,而是一个未知的状态——可能有值,可能无值,可能存在,可能不存在,可能是任何值,可能不是任何值。总之一切皆有可能。
NULL 的值不确定,因此 NULL 与 NULL 是不相同的。在逻辑判断中,NULL=NULL 返回的判断结果不是 TRUE ,而是 NULL。因为,未知和未知是无法进行比较的。假设你有两场相亲,在见面之前,你对这两个相亲对象的具体信息一无所知。因此,这俩人对你来说,都是“未知的”,都可以标记为 NULL。但是,你能说这俩人是同一个人吗?不能吧。但是,你能说这俩一定不是同一个人吗?也不一定。

NULL运算

因为NULL是一个未知值,所以它不属于任何一种数据类型,它和任何类型的数据进行运算,结果都为NULL。

 select null+0;
+--------+
| null+0 |
+--------+
|   NULL |
+--------+

select null/0;
+--------+
| null/0 |
+--------+
|   NULL |
+--------+

select concat(null,'abc');
+--------------------+
| concat(null,'abc') |
+--------------------+
| NULL               |
+--------------------+

三值逻辑

传统的真假逻辑,对于一个给定的命题,它要么为真,要么为假,非真即假,非假即真。在二值逻辑中,逻辑运算的结果只有真和假,不存在任何中间态。
但是,世间的事情,哪里都是这么简单的非黑即白呢~非真即假,非好即坏,是理想中的世界,而现实世界要复杂得多。对于一个命题,它不仅有可能是真的,有可能是假的,还有可能是未知的、不知道的、判断不了的。那么就有真、假、未知三种结果,即三值逻辑。
对于一个命题来说,如果它非真,不意味着它一定为假,因为它也有可能是NULL;如果它非假,对立面也不一定是真,因为它也有可能是NULL。TRUE/FALSE/NULL,三种逻辑运算结果,形成了三值逻辑体系。

逻辑运算

当 NULL 参与逻辑运算时,逻辑运算的结果会变得有些“反直觉”。但只要理解了 NULL 的本质,规律也并不难记住。

  • 或命题遵从:同假则假,一真则真,其余为 NULL
    在这里插入图片描述
  • 且命题遵从:同真则真,一假则假,其余为 NULL
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kejiayuan0806/article/details/107528605