处理空值
空值指示行中缺少列值。 空值是未知值; 它与零或所有空白不相同。
空值可以用作 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 参考 主题集合。