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 NULL
或IS NOT NULL
子句。WHERE
可以通过在语句中
INSERT
显式说明NULL
或UPDATE
将列退出INSERT
语句,将 null 值插入到列中。Null 值不能用作将表中的一行与表中另一行区分开所需的信息。 示例包括主键,或用于分发行的信息,例如分发键。
注解
当数据中存在 null 值时,逻辑运算符和比较运算符可能会返回第三个结果,UNKNOWN
而不是仅返回或FALSE
仅TRUE
返回。 这种对三值逻辑的需要是导致许多应用程序出错的根源。 包含返回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 |