處理空值
空值表示列中沒有直欄值。 空值是不明值; 它與零或全部空白不同。
空值可以用作 WHERE 及 HAVING 子句中的條件。 例如, WHERE 子句可以針對部分列指定包含空值的直欄。 使用包含空值的直欄的基本比較述詞不會選取直欄具有空值的列。 這是因為空值不小於、等於或大於條件中指定的值。 IS NULL 述詞用來檢查空值。 若要選取包含管理員號碼空值的所有列的值,您可以指定:
SELECT DEPTNO, DEPTNAME, ADMRDEPT
FROM CORPDATA.DEPARTMENT
WHERE MGRNO IS NULL;結果如下。
| DEPTNO | DEPTNAME | ADMRDEPT |
|---|---|---|
| D01 | 開發中心 | A00 |
| F22 | 分公司 F2 | E01 |
| G22 | 分公司 G2 | E01 |
| H22 | 分公司 H2 | E01 |
| I22 | 分公司 I2 | E01 |
| J22 | 分公司 J2 | E01 |
若要取得管理程式號碼沒有空值的列,您可以變更 WHERE 子句如下:
WHERE MGRNO IS NOT NULL另一個有助於比較可包含 NULL 值的值的述詞是 DISTINCT 述詞。 如果兩個直欄都包含相等非空值,則使用正常相等比較 (COL1 = COL2) 比較兩個直欄將為 true。 如果兩個直欄都是空值,則結果會是 false ,因為空值永不等於任何其他值,甚至不等於另一個空值。 使用 DISTINCT 述詞,會將空值視為相等。 因此,如果兩個直欄都包含相等的非空值,且兩個直欄都是空值,則 COL1 與 COL2 都不是 DISTINCT。
例如,假設您要從包含空值的兩個表格中選取資訊。 第一個表格 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 參照 主題集合。