🙏 感谢您的支持! 我们在七月份已经筹集了 $65 — 这足够我们工作到下个月。请帮助我们保持进度,进一步支持这个项目。 支持这个项目 →
SQL 代码已复制到剪贴板

课程 1.5 · 阅读时间:~7 分钟

NULL 是关系数据库中用于表示缺失、未知或不适用值的特殊标记。在本课程中,您将学习 NULL 的真正含义,它与普通值的区别,以及如何在比较和简单查询中安全地使用它。

关系数据库中的 NULL 值:含义、IS NULL 和逻辑

在之前的课程中,我们研究了关系概念和数据类型。现在我们需要理解当列根本不包含有意义的值时会发生什么。

插图显示 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 = NULL
  • 5 * NULL = NULL
  • 'Hello ' + NULL = NULL

同样的想法影响比较。由于 NULL 意味着“未知”,许多涉及 NULL 的表达式也会返回未知结果,而不是 true 或 false。


本课程的关键要点:

  • NULL 代表缺失、未知或不适用的数据。
  • NULL 与零、空字符串和布尔值 false 不同。
  • 标准比较如 =<> 与 NULL 的配合使用并不正确。
  • 在过滤 NULL 值时使用 IS NULLIS 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 NULLIS NOT NULL 以进行正确的检查。

在处理 NULL 时常见的错误是什么?

一个常见的错误是将 NULL 视为普通值在比较或算术中使用。这可能在过滤、条件和计算字段中产生意想不到的结果。

在下一课中,我们将介绍 SQL 本身,并查看查询的基本结构。

尝试解决以下任务,以巩固您在本课中学到的内容。

  1. 缺少邮政编码的地址