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