Collection Contents 上一页 下一页 PDF

ASA SQL 参考

SQL 语言元素

NULL 值


功能 

指定未知或不适用的值。

语法 

NULL

用法 

任何地方。

权限 

必须连接到数据库。

副作用 

无。

另请参见 
说明 

NULL 值是一个特殊值,它不同于任何数据类型的任何有效值。然而,NULL 值在任何数据类型中都是合法值。NULL 值用于表示缺少或不适用的信息。有两种截然不同的使用 NULL 的情况:

情况 说明
缺少 字段具有值,但该值未知。
不适用 字段不适用于特定的行。

SQL 允许在创建列时带有 NOT NULL 限制。这意味着那些特殊的列不能包含 NULL。

NULL 值将三值逻辑的概念引入 SQL。NULL 值通过任何比较运算符与任何值(包括 NULL 值)进行比较时都是"UNKNOWN"。返回 TRUE 的唯一搜索条件是 IS NULL 谓词。在 SQL 中,只有 WHERE 子句中的搜索条件的值为 TRUE 时才选择行;不选择其值为 UNKNOWN 或 FALSE 的行。

IS [ NOT ] truth-value 子句(其中 truth-value 是 TRUE、FALSE 或 UNKNOWN 中的一个)可用于选择涉及 NULL 值的行。有关此子句的说明,请参见搜索条件

以下示例中,列 Salary 包含 NULL。

条件 真值 是否选择?
Salary = NULL UNKNOWN NO
Salary <> NULL UNKNOWN NO
NOT (Salary = NULL) UNKNOWN NO
NOT (Salary <> NULL) UNKNOWN NO
Salary = 1000 UNKNOWN NO
Salary IS NULL TRUE YES
Salary IS NOT NULL FALSE NO
Salary = expression IS UNKNOWN TRUE YES

同样的规则也适用于比较两个不同表中的列。因此,将两个表连接到一起不会选择其所比较的任何一列含有 NULL 值的行。

用于数字表达式时,NULL 还有一个有趣的属性。任何 涉及 NULL 值的数字表达式的结果都为 NULL。这意味着,如果将 NULL 加到一个数字上,结果为 NULL 而不是数字。如果希望 NULL 被视作 0,则必须使用 ISNULL( expression, 0 ) 函数(请参见 SQL 函数)。

公式化 SQL 查询时的很多常见错误是由 NULL 的行为引起的。必须小心避免这些问题。有关组合搜索条件时三值逻辑的效果的说明,请参见搜索条件

设置运算符和 DISTINCT 子句 

在集合操作(UNION、INTERSECT、EXCEPT)和 DISTINCT 操作中,会针对不同的搜索条件对 NULL 进行不同的处理。包含 NULL 而其余列均相同的行在此类操作中被视为相同。

例如,在表 T1 的所有行中名为 redundant 的列的值均为 NULL,则下面的语句将返回一个单独的行:

SELECT DISTINCT redundant
FROM T1
标准和兼容性 
示例 

Collection Contents 上一页 下一页 PDF