ヌル値の処理

ヌル値とは、ある行の列値が存在しないことを意味します。ヌル値は不明な値で、ゼロまたはすべてブランクの値とは異なります。

ヌル値は、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 解説書 トピック集を参照してください。