处理空值

空值指示行中缺少列值。 空值是未知值; 它与零或所有空白不相同。

空值可以用作 WHERE 和 HAVING 子句中的条件。 例如, WHERE 子句可以指定对于某些行包含空值的列。 使用包含空值的列的基本比较谓词不会为该列选择具有空值的行。 这是因为空值不小于,等于或大于条件中指定的值。 IS NULL 谓词用于检查空值。 要选择包含经理编号的空值的所有行的值,可以指定:

SELECT DEPTNO, DEPTNAME, ADMRDEPT
  FROM CORPDATA.DEPARTMENT
  WHERE MGRNO IS NULL;

结果如下。

DEPTNO DEPTNAME ADMRDEPT
D01 DEVELOPMENT CENTER A00
F22 BRANCH OFFICE F2 E01
G22 BRANCH OFFICE G2 E01
H22 BRANCH OFFICE H2 E01
I22 BRANCH OFFICE I2 E01
J22 BRANCH OFFICE J2 E01

要获取对于管理器编号没有空值的行,您可以更改 WHERE 子句,如下所示:

WHERE MGRNO IS NOT NULL

另一个可用于比较可包含 NULL 值的值的谓词是 DISTINCT 谓词。 如果两个列都包含相等的非空值,那么使用正常等值比较两列 (COL1 = COL2) 进行比较将为 true。 如果这两列都为空,那么结果将为 false ,因为空值从不等于任何其他值,甚至不等于另一个空值。 使用 DISTINCT 谓词时,会将空值视为等于。 因此,如果这两列都包含相等的非空值,并且这两列都是空值,那么 COL1 与 COL2 将不区分。

例如,假设要从包含空值的两个表中选择信息。 第一个表 T1 具有具有以下值的列 C1 。

C1
2
1
空值

第二个表 T2 具有具有以下值的列 C2 。

C2
2
空值

运行以下 SELECT 语句:

SELECT * 
    FROM T1, T2
    WHERE C1 IS DISTINCT FROM C2;

结果如下。

C1 C2
1 2
1 -
2 -
- 2

有关使用空值的更多信息,请参阅 Db2 for i SQL 参考 主题集合。