在数据库操作中,NULL值是一个常见的概念,它代表了未知的、缺失的或者不适用的数据。正确地处理NULL值对于保持数据库输出的质量和准确性至关重要。本文将介绍SQL中NULL值的不同方面、一般认知以及最佳实践方法。
在不同的语境中,NULL值可能被理解为空白、空值、零、无、缺失值、最低值、可忽略值、可选值、无效或空。然而,在数据库理论中,NULL代表的是'无结果'或'未知',它不等于它自己。
例如,在C++中,NULL不等于任何值,包括它自己。如果尝试比较NULL值,结果将是未知的,既不会报错也不会有结果。
根据CODD的规则3,数据库管理系统必须允许每个字段保持NULL(或空),并且必须支持一种系统化的方式来表示“缺失信息和不适用信息”,这种方式必须与所有常规值不同,并且与数据类型无关。
在Microsoft的解释中,NULL值表示该值是未知的,它与空值或零值不同。没有任何两个NULL值是相等的,比较两个NULL值或NULL值与其他任何值的结果都是未知的,因为每个NULL值的值都是未知的。
在T-SQL中,ISNULL和COALESCE函数用于返回输入参数中的第一个非NULL表达式。ISNULL接受两个参数,而COALESCE可以接受任意数量的参数。
ISNULL函数如果第一个参数不是NULL,则返回第一个参数;如果是NULL,则返回第二个参数。COALESCE函数则返回第一个非NULL参数,如果所有参数都是NULL,则返回NULL。
DECLARE @x INT = NULL;
SELECT ISNULL(@x, '0') AS ISNULL_OUTPUT;
以上代码中,@x是NULL,所以ISNULL函数返回0。
DECLARE @x INT = NULL;
DECLARE @y INT = NULL;
DECLARE @z INT = 20;
SELECT COALESCE(@x, @y, @z, '0') AS COALESCE_OUTPUT;
在这段代码中,@x和@y都是NULL,所以COALESCE函数返回第一个非NULL参数,即20。
NULLIF函数接受两个参数,如果两个参数相等则返回NULL,否则返回第一个参数。
DECLARE @x INT = 0;
SELECT NULLIF(@x, 0) AS Result;
如果@x的值是0,则NULLIF函数返回NULL。
不能使用关系操作符(如=、<、>)来测试NULL值。要检查一个值是否为NULL,需要使用IS NULL或IS NOT NULL操作符。
DECLARE @value INT = NULL;
IF @value IS NULL
BEGIN
SELECT 'Value is NULL' AS Result;
END
SET @value = 1;
IF @value IS NOT NULL
BEGIN
SELECT 'Value is not NULL' AS Result;
END
NULL不等于任何值,也不大于、小于或不同于任何值,包括它自己。
IN操作符不会返回NULL值的匹配结果,而NOT IN操作符如果至少有一个值是NULL,则返回false。
BETWEEN和NOT BETWEEN操作符如果其中一个限制值是NULL,则返回false。
在排序操作中,NULL被视为最小的值。
在执行GROUP BY操作时,NULL被视为相等。如果GROUP BY子句中的列包含NULL,则这些NULL值将被分组到一个组中。