NULL 和 UNKNOWN (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库

NULL指示该值未知。 空值不同于空白或零值。 没有两个相等的空值。 两个 null 值之间的比较,或 null 值和任何其他值之间的比较,返回未知,因为每个 NULL 值的值未知。

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

如下所示:

  • 若要测试查询中的 null 值,请使用IS NULLIS NOT NULL子句。WHERE

  • 可以通过在语句中INSERT显式说明NULLUPDATE将列退出INSERT语句,将 null 值插入到列中。

  • Null 值不能用作将表中的一行与表中另一行区分开所需的信息。 示例包括主键,或用于分发行的信息,例如分发键。

注解

当数据中存在 null 值时,逻辑运算符和比较运算符可能会返回第三个结果,UNKNOWN而不是仅返回或FALSETRUE返回。 这种对三值逻辑的需要是导致许多应用程序出错的根源。 包含返回UNKNOWN的布尔表达式UNKNOWN中的逻辑运算符,除非运算符的结果不依赖于UNKNOWN表达式。 下面这些表提供了此行为的示例。

下表显示了将运算符应用于两个布尔表达式的结果,其中一个 AND 表达式返回 UNKNOWN

表达式 1 表达式 2 Result
TRUE UNKNOWN UNKNOWN
UNKNOWN UNKNOWN UNKNOWN
FALSE UNKNOWN FALSE

下表显示了将运算符应用于两个布尔表达式的结果,其中一个 OR 表达式返回 UNKNOWN

表达式 1 表达式 2 Result
TRUE UNKNOWN TRUE
UNKNOWN UNKNOWN UNKNOWN
FALSE UNKNOWN UNKNOWN