SQL Null Values
SQL NULL 值
Section titled “SQL NULL 值”NULL 值表示数据库列中缺失、未知或不适用的数据。
默认情况下,除非指定了 NOT NULL 约束,否则表列可以包含 NULL 值。
本章讲解如何使用 IS NULL 和 IS NOT NULL 运算符正确地测试 NULL 值。
理解 SQL NULL 值
Section titled “理解 SQL NULL 值”如果表中的列是可选的(即没有 NOT NULL 约束),您可以在插入新记录或更新现有记录时不对该列提供值。在这种情况下,数据库会在该字段中存储一个 NULL 值。
一个 NULL 值不同于空字符串(”)或数字零(0)。它是一个特殊标记,表示数据不存在或未知。
处理 NULL 值需要特别考虑,因为标准比较运算符(如 =、<>、<、>)在与 NULL 结合使用时不会按预期工作。例如,column = NULL 不会返回 column 为 NULL 的行;它实际上会返回 unknown(在 WHERE 子句中被视为 false)。
重要提示:NULL 不等同于 0 或空字符串。使用标准比较运算符将 NULL 与任何值(即使是另一个 NULL)进行比较都会产生 UNKNOWN,而不是 TRUE 或 FALSE。 |
|---|
在 SQL 中使用 NULL 值
Section titled “在 SQL 中使用 NULL 值”考虑以下“Employees”表。“Address”列是可选的,可以包含 NULL 值:
EmployeeID LastName FirstName Address City
1 Hansen Ola NULL Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari NULL Stavanger
4 Jensen John Aker Brygge 5 Oslo
如果我们插入新员工记录时未指定地址,则该员工的“Address”字段将为 NULL。
我们如何根据 NULL 值过滤记录?
如前所述,不能直接使用 =、< 或 <> 等标准比较运算符来测试 NULL 值。相反,SQL 提供了 IS NULL 和 IS NOT NULL 运算符。
SQL IS NULL 运算符
Section titled “SQL IS NULL 运算符”要选择“Address”列为 NULL 的记录,您可以使用 IS NULL 运算符。
示例:
SELECT LastName, FirstName, Address FROM Employees WHERE Address IS NULL;
结果集将包含地址未知的员工:
LastName FirstName Address
Hansen Ola NULL
Pettersen Kari NULL
提示:始终使用 IS NULL 来检查 NULL 值的存在。切勿使用 column_name = NULL。 |
|---|
SQL IS NOT NULL 运算符
Section titled “SQL IS NOT NULL 运算符”要选择“Address”列具有已知值(即非 NULL)的记录,您可以使用 IS NOT NULL 运算符。
示例:
SELECT LastName, FirstName, Address FROM Employees WHERE Address IS NOT NULL;
结果集将包含已记录地址的员工:
LastName FirstName Address
Svendson Tove Borgvn 23
Jensen John Aker Brygge 5
关于 NULL 的附加说明:
Section titled “关于 NULL 的附加说明:”COUNT(column_name)、SUM()、AVG()、MIN()、MAX() 等聚合函数通常会忽略 NULL 值。COUNT(*) 是个例外;它会计算所有行,无论特定列中是否存在 NULL 值。
可以使用 COALESCE() 等函数或数据库特定的函数,例如 IFNULL() (MySQL) 或 ISNULL() (SQL Server),在查询结果中将 NULL 值替换为默认值。这些内容将在后续章节中介绍。