空值

空值表示值未知。空值不同于空白或零值。没有两个相等的空值。比较两个空值或将空值与任何其他值相比均返回未知,这是因为每个空值均为未知。

空值一般表示数据未知、不适用或将在以后添加数据。例如,客户的中间名首字母在客户下定单时可能不知道。

下列是有关空值的信息:

  • 若要在查询中测试空值,请在 WHERE 子句中使用 IS NULL 或 IS NOT NULL。

  • 在 SQL Server Management Studio 代码编辑器中查看查询结果时,空值在结果集中显示为 NULL

  • 可通过下列方法在列中插入空值:在 INSERT 或 UPDATE 语句中显式声明 NULL,或不让列出现在 INSERT 语句中,或使用 ALTER TABLE 语句在现有表中新添一列。

  • 空值无法用于将表中的一行与另一行区分开所需的信息(例如主键)。

在程序代码中,可以检查空值以便只对具有有效(或非空)数据的行执行某些计算。例如,报表可以只打印列中数据不为空的社会安全列。执行计算时删除空值很重要,因为如果包含空值列,某些计算(如平均值)会不准确。

如果数据中可能存储有空值而您又不希望数据中出现空值,就应该创建查询和数据修改语句,删除空值或将它们转换为其他值。

重要说明重要提示

为了尽量减少对现有查询或报告的维护和可能的影响,应尽量少用空值。对查询和数据修改语句进行计划,使空值的影响降到最小。

如果数据中出现空值,则逻辑运算符和比较运算符有可能返回 TRUE 或 FALSE 以外的第三种结果 UNKNOWN。需要三值逻辑是导致出现许多应用程序错误的根源。下面这些表概括了引入空值比较的效果。

下表显示了将 AND 运算符应用到两个布尔操作数的结果。

AND

TRUE

UNKNOWN

FALSE

TRUE

TRUE

UNKNOWN

FALSE

UNKNOWN

UNKNOWN

UNKNOWN

FALSE

FALSE

FALSE

FALSE

FALSE

下表显示了将 OR 运算符应用到两个布尔操作数的结果。

OR

TRUE

UNKNOWN

FALSE

TRUE

TRUE

TRUE

TRUE

UNKNOWN

TRUE

UNKNOWN

UNKNOWN

FALSE

TRUE

UNKNOWN

FALSE

下表显示了 NOT 运算符如何对布尔运算符的结果执行求反(或反向)操作。

应用 NOT 运算符的布尔表达式

计算结果

TRUE

FALSE

UNKNOWN

UNKNOWN

FALSE

TRUE

ISO 标准使用关键字 IS NULL 和 IS NOT NULL 来测试是否存在空值。

应用 IS NULL 运算符的布尔

表达式

求出的值为

应用 IS NOT NULL 运算符的布尔表达式

计算结果

TRUE

FALSE

TRUE

TRUE

NULL

TRUE

NULL

FALSE

FALSE

FALSE

FALSE

TRUE

Transact-SQL 还提供空值处理的扩展功能。如果 ANSI_NULLS 选项设置为 OFF,则空值之间的比较(如 NULL = NULL)等于 TRUE。空值与任何其他数据值之间的比较都等于 FALSE。