PostgreSQL NULL 値
NULL 値は欠落した未知のデータを表します。
デフォルトでは、テーブルの列は NULL 値を格納できます。
この章では IS NULL および IS NOT NULL 演算子について説明します。
構文
テーブル作成時の NULL の基本構文は次のとおりです:
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
ここで、NOT NULL はフィールドが常に値を含むことを強制します。つまり、フィールドに値を追加しないと、新しいレコードを挿入したりレコードを更新したりできません。
NULL 値を持つフィールドは、レコード作成時に空白のままにできることを示します。
データをクエリするとき、NULL 値はいくつかの問題を引き起こす可能性があります。未知の値を他の任意の値と比較すると、結果は常に未知になるためです。
また、NULL と 0 は等価ではないため、比較できません。
例
例
COMPANY テーブルを作成します(COMPANY SQL ファイルをダウンロード)、データ内容は次のとおりです:
サンプルdb# select * from COMPANY; id | name | age | address | salary ----+-------+-----+-----------+-------- 1 | Paul | 32 | California| 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall| 45000 7 | James | 24 | Houston | 10000 (7 rows)
次に、UPDATE 文を使用して、NULL に設定できるいくつかのフィールドを NULL に設定します:
サンプルdb=# UPDATE COMPANY SET ADDRESS = NULL, SALARY = NULL where ID IN(6,7);これで COMPANY テーブルは次のようになります:
サンプルdb=# select * from company; id | name | age | address | salary ----+-------+-----+---------------------+-------- 1 | Paul | 32 | California | 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | | 7 | James | 24 | | (7 rows)
IS NOT NULL
次に、IS NOT NULL 演算子を使用して、SALARY(給与)値が空でないすべてのレコードを一覧表示します:
サンプルdb=# SELECT ID, NAME, AGE, ADDRESS, SALARY FROM COMPANY WHERE SALARY IS NOT NULL;
結果は次のとおりです:
id | name | age | address | salary ----+-------+-----+------------+-------- 1 | Paul | 32 | California | 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 (5 rows)
IS NULL
IS NULL は NULL 値を持つフィールドを検索するために使用します。
以下は IS NULL 演算子の使用方法で、SALARY(給与)値が空のレコードを一覧表示します:
サンプルdb=# SELECT ID, NAME, AGE, ADDRESS, SALARY FROM COMPANY WHERE SALARY IS NULL;
結果は次のとおりです:
id | name | age | address | salary ----+-------+-----+---------+-------- 6 | Kim | 22 | | 7 | James | 24 | | (2 rows)その他の拡張