1.3.4.6 NULL值
MySQL 中 NULL 值像是一个坑,很多新手同学都碰到了类似的问题,当您了解到 NULL的用法,那么也就那么回事,呵呵!从概念上讲,NULL 表示一个未知的值,它与其它的值处理不一样。
如果要比较 NULL 值,在语句中要使用 IS NULL 或 IS NOT NULL
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
1 row in set (0.00 sec)
不能使用算术比较运算符,如=、<或< >来测试 NULL。为了演示这一点,请尝试下面的查询:
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
1 row in set (0.00 sec)
因为任何与 NULL 的算术比较的结果也是 NULL,所以不能从这种比较中获得任何有意义的结果。
在 MySQL 中,0 或 NULL意味着 false,其他任何东西都意味着 true。布尔运算的默认真值为1。
Note
在 where 字句中,只有比较结果为 true 时,才会被筛选出来。如果比较结果false(包括 0 和 NULL)结果都会被过滤。
在 GROUP BY 的字句中,所有 NULL 值被视为是想等的。
在 ORDER BY 的字句中,NULL 会优先显示,如果使用 ORDER BY DESC ,则 NULL 最后显示。
0 和 '' 都是一个具体的值,并非一个未知的 NULL 值。
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
1 row in set (0.00 sec)
在后续的章节中,我们还会详细介绍 NULL 值。