指定未知或不适用的值。
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 的行为引起的。必须小心避免这些问题。有关组合搜索条件时三值逻辑的效果的说明,请参见搜索条件。
在集合操作(UNION、INTERSECT、EXCEPT)和 DISTINCT 操作中,会针对不同的搜索条件对 NULL 进行不同的处理。包含 NULL 而其余列均相同的行在此类操作中被视为相同。
例如,在表 T1 的所有行中名为 redundant 的列的值均为 NULL,则下面的语句将返回一个单独的行:
SELECT DISTINCT redundant FROM T1
SQL/92 初级特性。
Sybase 在有些环境中,Adaptive Server Enterprise 将 NULL 按值处理,而 Adaptive Server Anywhere 不是这样。例如,在 Adaptive Server Anywhere 中,使用以下 WHERE 子句的查询结果中并不包括列 c1 中为 NULL 的行,因为条件的值为 UNKNOWN:
WHERE NOT( C1 = NULL )
而在 Adaptive Server Enterprise 中,条件的值为 TRUE,因此返回这些行。为了兼容,应该使用 IS NULL 而不是比较运算符。
Adaptive Server Anywhere 中的唯一索引可以包含保存 NULL 和其它相同值的行。而 Adaptive Server Enterprise 中的唯一索引不允许这样的条目。
如果使用 jConnect,则 TDS_EMPTY_STRING_IS_NULL 选项将控制返回的空字符串是作为 NULL 字符串,还是作为包含一个空白字符的字符串。
有关详细信息,请参见 TDS_EMPTY_STRING_IS_NULL 选项 [database]。
以下 INSERT 语句将一个 NULL 值插入到表 Borrowed_book 的 date_returned 列中。
INSERT INTO Borrowed_book ( date_borrowed, date_returned, book ) VALUES ( CURRENT DATE, NULL, '1234' )
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。