SQL

【SQL】NULLの取り扱い方(IS NULL)

2021年1月31日

【SQL】NULLの取り扱い方

NULLの判定には「IS NULL」や「IS NOT NULL」を使用します。本記事では、NULLの取り扱い方について解説しています。

また「itemテーブル」には、次のようなデータが格納されていることを前提としています。

【itemテーブル】

ID (id) ※PK商品名 (name)価格 (price)カテゴリ (category)
1商品A1980
2商品B4980家具
3商品C7200家具
4商品D500NULL

スポンサーリンク

NULLを判定する(IS NULL)

「IS NULL算子演」を使うことで、NULLを判定することができます。

IS NULLの基本構文

SELECT  *  FROM  テーブル名  WHERE  列名  IS NULL;

次の例では、「item」テーブルから「カテゴリ(category)」がNULLのデータを抽出しています。

■IS NULLの使用例

SELECT
  *
FROM
  item
WHERE
  category IS NULL;

■実行結果

+----+-------+-------+----------+
| id | name  | price | category |
+----+-------+-------+----------+
|  4 | 商品D |   500 | NULL     |
+----+-------+-------+----------+
1 row in set (0.00 sec)

NULL以外を判定する(IS NOT NULL)

「IS NOT NULL演算子」を使うことで、NULL以外を判定することができます。

IS NULLの基本構文

SELECT  *  FROM  テーブル名  WHERE  列名  IS NOT NULL;

次の例では、「item」テーブルから「カテゴリ(category)」がNULL以外のデータを抽出しています。

■IS NOT NULLの使用例

SELECT
  *
FROM
  item
WHERE
  category IS NOT NULL;

■実行結果

+----+-------+-------+----------+
| id | name  | price | category |
+----+-------+-------+----------+
|  1 | 商品A |  1980 | 本       |
|  2 | 商品B |  4980 | 家具     |
|  3 | 商品C |  7200 | 家具     |
+----+-------+-------+----------+
3 rows in set (0.00 sec)

INSERT文でNULLを登録する

INSERT文で指定列にNULLを登録するには、VALUESの値に「NULL」を設定することで登録することができます。

スポンサーリンク

次の例では、「item」テーブルに「カテゴリ(category)」がNULLのレコードを新しく追加しています。

■INSERT文でNULLを登録する例

INSERT INTO ITEM
    (ID, NAME, PRICE, CATEGORY)
VALUES
    ('5', '商品E', '980', NULL);

■実行結果

Query OK, 1 row affected (0.02 sec)


> SELECT * FROM item;
+----+-------+-------+----------+
| id | name  | price | category |
+----+-------+-------+----------+
|  1 | 商品A |  1980 | 本       |
|  2 | 商品B |  4980 | 家具     |
|  3 | 商品C |  7200 | 家具     |
|  4 | 商品D |   500 | NULL     |
|  5 | 商品E |   980 | NULL     |
+----+-------+-------+----------+
5 rows in set (0.01 sec)

UPDATE文でNULLに更新する

UPDATE文で指定列をNULLに更新するには、SETの値に「NULL」を設定することで更新することができます。

次の例では、「item」テーブル「id = '3'」のレコードの「カテゴリ(category)」をNULLに更新しています。

■UPDATE文でNULLに更新する例

UPDATE
    ITEM
SET
    CATEGORY = NULL
WHERE ID = '3';

■実行結果

Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

> SELECT * FROM item;
+----+-------+-------+----------+
| id | name  | price | category |
+----+-------+-------+----------+
|  1 | 商品A |  1980 | 本       |
|  2 | 商品B |  4980 | 家具     |
|  3 | 商品C |  7200 | NULL     |
|  4 | 商品D |   500 | NULL     |
|  5 | 商品E |   980 | NULL     |
+----+-------+-------+----------+
5 rows in set (0.00 sec)

helpful