處理空值

空值表示列中沒有直欄值。 空值是不明值; 它與零或全部空白不同。

空值可以用作 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 參照 主題集合。