-
NULL的定义与特性。
- 未知性:NULL表示数据未知或不可用,无法直接与任何值(包括另一个NULL)进行比较或运算。
- 三值逻辑:Oracle处理布尔表达式时采用三值逻辑(TRUE、FALSE、UNKNOWN),其中NULL比较的结果为UNKNOWN。
- 空字符串与NULL的等价性:空字符串('')在Oracle中被视为NULL,因此不能使用
=
或!=
判断空字符串,应直接使用IS NULL
或IS NOT NULL
。
-
比较与运算规则。
- 禁止直接比较:
NULL = NULL
、NULL != NULL
等表达式的结果均为UNKNOWN,不返回TRUE或FALSE。 - 逻辑运算的特殊性:
NOT(UNKNOWN)
返回UNKNOWN;AND
运算中,若任一操作数为UNKNOWN,则整个表达式结果为UNKNOWN;OR
运算中,若任一操作数为TRUE或UNKNOWN,则整个表达式结果为TRUE。
- 禁止直接比较:
-
聚合函数与空值的处理。
- 聚合函数(如SUM、AVG)自动忽略NULL值,仅计算非空值。
COUNT(*)
统计时,若列完全为NULL(即所有行该列均为NULL),则结果为0;若部分行该列为NULL,则统计非NULL的行数。
-
特殊函数处理。
- NVL:将NULL转换为指定值(例如
NVL(column, 0)
可将列中的NULL替换为0)。34 - COALESCE:从左至右返回第一个非NULL值;若所有参数为NULL,则结果为NULL。
- DECODE:将两个NULL视为相等(例如
DECODE(column, NULL, 'A')
可能返回'A')。2
- NVL:将NULL转换为指定值(例如
-
索引与排序。
- 索引限制:含有NULL值的列无法建立索引,查询时可能遗漏包含NULL值的行。5
- 排序规则:在ORDER BY中,NULL被视为最大值(降序排列),因此通常排在最后。
注意事项:
6. 更新列时显式设置为NULL
(例如UPDATE table SET column = NULL WHERE ...
),避免将空字符串误存为空值。
7. 避免在WHERE子句中使用column = NULL
或column != NULL
,应改用column IS NULL
或column IS NOT NULL
。