课程 1.5 · 阅读时间:~7 分钟
NULL 是关系数据库中用于表示缺失、未知或不适用值的特殊标记。在本课程中,您将学习 NULL 的真正含义,它与普通值的区别,以及如何在比较和简单查询中安全地使用它。
关系数据库中的 NULL 值:含义、IS NULL 和逻辑
在之前的课程中,我们研究了关系概念和数据类型。现在我们需要理解当列根本不包含有意义的值时会发生什么。

NULL 在关系数据库中意味着什么?
NULL 并不意味着一个正常存储的值。它是一个特殊标记,告诉数据库该值缺失、未知或不适用。
这很重要,因为 NULL 的行为与文本、数字或布尔值不同。它在比较、过滤和计算中遵循自己的规则。
NULL 不是什麼?
为了避免混淆,请记住 NULL 不是:
- NULL 不是 0:零是一个真实的数值。
- NULL 不是空字符串:
''仍然是文本,即使它不包含任何字符。 - NULL 不是 false:在数据库逻辑中,NULL 通常意味着 未知,而不是 true 或 false。
为什么数据库使用 NULL?
当一个值无法正常填充时,数据库使用 NULL。
典型情况:
- 未知信息:客户的中间名可能尚未知道。
- 不适用:公司税号不适用于个人。
- 缺失数据:在数据输入过程中可能跳过了一些信息。
IS NULL 和 IS NOT NULL 如何工作?
因为 NULL 代表未知状态,标准比较运算符如 = 和 <> 与它的配合使用并不正确。
例如,value = NULL 不会返回 true。要正确检查 NULL,请使用特殊运算符。
IS NULL
使用 IS NULL 查找列没有值的行:
SELECT *
FROM address
WHERE address2 IS NULL;
IS NOT NULL
使用 IS NOT NULL 查找列包含某个值的行:
SELECT *
FROM address
WHERE address2 IS NOT NULL;
NULL 在计算和逻辑中的表现如何?
一个最重要的规则是 NULL 通常会传播。如果在计算中使用 NULL,结果通常也是 NULL。
10 + NULL = NULL5 * NULL = NULL'Hello ' + NULL = NULL
同样的想法影响比较。由于 NULL 意味着“未知”,许多涉及 NULL 的表达式也会返回未知结果,而不是 true 或 false。
本课程的关键要点:
NULL代表缺失、未知或不适用的数据。NULL与零、空字符串和布尔值 false 不同。- 标准比较如
=和<>与 NULL 的配合使用并不正确。 - 在过滤 NULL 值时使用
IS NULL和IS NOT NULL。 - 涉及 NULL 的计算通常返回 NULL 作为结果。
常见问题解答
NULL 是否与空字符串相同?
不。空字符串仍然是一个字符数为零的文本值。NULL 意味着没有已知的存储值。
为什么 value = NULL 不起作用?
因为 NULL 意味着“未知”,而标准比较运算符并不是为了测试这种状态而设计的。请使用 IS NULL。
NULL 可以出现在数字列中吗?
可以。NULL 并不绑定到某一种数据类型。数字列、文本列或日期列都可以包含 NULL,除非有约束禁止。
面试问题
如何在数据库面试中解释 NULL?
NULL 是一个特殊标记,表示缺失、未知或不适用的数据。它与零、false 或空字符串不同,并且在比较和计算中遵循特殊规则。
为什么 SQL 查询使用 IS NULL 而不是 = NULL?
因为 NULL 代表未知状态。标准运算符如 = 和 <> 不以与普通值相同的方式评估 NULL,因此 SQL 提供了 IS NULL 和 IS NOT NULL 以进行正确的检查。
在处理 NULL 时常见的错误是什么?
一个常见的错误是将 NULL 视为普通值在比较或算术中使用。这可能在过滤、条件和计算字段中产生意想不到的结果。
在下一课中,我们将介绍 SQL 本身,并查看查询的基本结构。