ヌル値の処理
ヌル値とは、ある行の列値が存在しないことを意味します。ヌル値は不明な値で、ゼロまたはすべてブランクの値とは異なります。
ヌル値は、WHERE および HAVING 文節の中で条件として使用できます。例えば、WHERE 文節では、ある行についてヌル値を含んでいる列を指定することができます。ヌル値が入った列を使用する基本的な比較述部は、その列にヌル値のある行を選択しません。これは、ヌル値が条件に指定された値より小さくもなく、等しくもなく、大きくもないためです。 NULL 値を検査するために、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) を使用した 2 つの列の比較は真になります。 両方の列がヌルである場合、ヌルは他の値、他のヌル値とさえ決して等しくないので、結果は偽になります。 DISTINCT 述部を使用すると、ヌル値は等しいと考えられます。 両方の列に等しい非ヌル値が含まれている場合、および両方の列がヌル値である場合にも、「COL1 は COL2 からの NOT DISTINCT である」は真になります。
例えば、ヌル値を含む 2 つの表から情報を選択したいとします。 最初の表 T1 には、以下の値の入った列 C1 があります。
| C1 |
|---|
| 2 |
| 1 |
| ヌル |
2 番目の表 T2 には、以下の値の入った列 C2 があります。
| C2 |
|---|
| 2 |
| ヌル |
以下の SELECT ステートメントを実行します。
SELECT *
FROM T1, T2
WHERE C1 IS DISTINCT FROM C2
結果は次のようになります。
| C1 | C2 |
|---|---|
| 1 | 2 |
| 1 | - |
| 2 | - |
| - | 2 |
NULL 値の使用に関する詳細については、Db2® for iSQL 解説書 トピック集を参照してください。