null 値の処理

NULL 値とは、行に列値がないことを示します。 null値は不明な値です。 ゼロまたはすべてのブランクと同じではありません。

このタスクについて

WHERE節とHAVING節では、条件としてnull値を使用できます。 たとえば、WHERE節は、一部の行にnull値を含む列を指定できます。 null値を含む列を使用する基本的な比較述部は、列にnull値を持つ行を選択しません。 これは、null 値が条件で指定された値以上であるためです。 IS NULL述部は、null値をチェックするために使用されます。

例 1: 列内のNULLを含む行の選択
マネージャ番号のnull値を含むすべての行の値を選択するには、次のステートメントを発行できます。
SELECT DEPTNO, DEPTNAME, ADMRDEPT
  FROM DSN8D10.DEPT  
  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
例 2: NULL 値を含まない行の選択

マネージャ番号にnull値がない行を取得するには、前の例のWHERE句を次のように変更します。

WHERE MGRNO IS NOT NULL
例 3: NULL 値を含む値の比較
NULL値を含む可能性のある値を比較するのに役立つもう1つの述部は、DISTINCT述部です。 通常の等しい比較(COL1 = COL2)を使用して2つの列を比較すると、両方の列にnull以外の等しい値が含まれている場合に真になります。 両方の列がnullの場合、nullが他の値と等しくなることはなく、別のnull値と等しくなることもないため、結果はfalseになります。 DISTINCT述部を使用すると、NULL値は等しいと見なされます。 したがって、COL1はCOL2から区別されません。両方の列に等しい非ヌル値が含まれている場合、両方の列がnull 値である場合もtrueになります。

たとえば、null値を含む2つの表から情報を選択するとします。 最初の表T1には、次の値を持つ列C1があります。

C1
2
1
ヌル

2番目の表には、次の値を持つ列C2があります。

C2
2
ヌル

以下の SELECT ステートメントを発行するとします。

SELECT * 
    FROM T1, T2
    WHERE C1 IS DISTINCT FROM C2

結果は次のとおりです。

C1 C2
1 2
1 -
2 -
- 2