今回は、NULLIF関数の使い方について説明します!NULLIFは2つの値を比較して、同じなら NULL を返し、違うなら最初の値を返すことのできる関数です。NULLIFはCASE式よりもシンプルに書くことができます。
データ準備
NULLIF関数を試すためにテーブルを作成し、データを追加します。
-- テーブル作成
CREATE TABLE products (
id NUMBER PRIMARY KEY,
category VARCHAR2(50),
product_name VARCHAR2(50)
);
-- データの登録
INSERT
ALL INTO products
VALUES
(1, '果物', 'りんご') INTO products
VALUES
(2, '果物', 'みかん') INTO products
VALUES
(3, NULL, NULL) INTO products
VALUES
(4, '果物', 'ぶどう') INTO products
VALUES
(5, '野菜', 'にんじん') INTO products
VALUES
(6, '野菜', NULL) INTO products
VALUES
(7, NULL, NULL) INTO products
VALUES
(8, '野菜', 'じゃがいも') INTO products
VALUES
(9, '野菜', 'キャベツ') INTO products
VALUES
(10, '飲み物', 'お茶') INTO products
VALUES
(11, '飲み物', 'コーヒー') INTO products
VALUES
(12, NULL, NULL) INTO products
VALUES
(13, '飲み物', NULL) INTO products
VALUES
(14, '飲み物', '牛乳') INTO products
VALUES
(15, '果物', '果物') INTO products
VALUES
(16, '飲み物', 'オレンジジュース') INTO products
VALUES
(17, NULL, NULL) INTO products
VALUES
(18, '果物', 'もも') INTO products
VALUES
(19, NULL, 'きゅうり') INTO products
VALUES
(20, NULL, NULL)
SELECT
*
FROM
dual;
商品ID | 分類 | 商品名 |
---|---|---|
1 | 果物 | りんご |
2 | 果物 | みかん |
3 | – | – |
4 | 果物 | ぶどう |
5 | 野菜 | にんじん |
6 | 野菜 | – |
7 | – | – |
8 | 野菜 | じゃがいも |
9 | 野菜 | キャベツ |
10 | 飲み物 | お茶 |
11 | 飲み物 | コーヒー |
12 | – | – |
13 | 飲み物 | – |
14 | 飲み物 | 牛乳 |
15 | 果物 | 果物 |
16 | 飲み物 | オレンジジュース |
17 | – | – |
18 | 果物 | もも |
19 | – | きゅうり |
20 | – | – |
NULLIF関数を使い方
NULLIF関数は下記のように記述します。
NULLIF(値1, 値2)
値1 と 値2 が等しい場合 → NULL
を返す
値1 と 値2 が異なる場合 → 値1
を返す
試しにcategoryとproduct_nameを結合して表示してみましょう。
SELECT
ID AS "商品ID"
, CATEGORY AS "分類"
, PRODUCT_NAME AS "商品名"
, NULLIF(CATEGORY || ':' || PRODUCT_NAME, ':') AS "分類:商品名"
FROM
PRODUCTS;
商品ID | 分類 | 商品名 | 分類:商品名 |
---|---|---|---|
1 | 果物 | りんご | 果物:りんご |
2 | 果物 | みかん | 果物:みかん |
3 | – | – | – |
4 | 果物 | ぶどう | 果物:ぶどう |
5 | 野菜 | にんじん | 野菜:にんじん |
6 | 野菜 | – | 野菜: |
7 | – | – | – |
8 | 野菜 | じゃがいも | 野菜:じゃがいも |
9 | 野菜 | キャベツ | 野菜:キャベツ |
10 | 飲み物 | お茶 | 飲み物:お茶 |
11 | 飲み物 | コーヒー | 飲み物:コーヒー |
12 | – | – | – |
13 | 飲み物 | – | 飲み物: |
14 | 飲み物 | 牛乳 | 飲み物:牛乳 |
15 | 果物 | 果物 | 果物:果物 |
16 | 飲み物 | オレンジジュース | 飲み物:オレンジジュース |
17 | – | – | – |
18 | 果物 | もも | 果物:もも |
19 | – | きゅうり | :きゅうり |
20 | – | – | – |
これをCASE式で表現すると…
SELECT
ID AS "商品ID"
, CATEGORY AS "分類"
, PRODUCT_NAME AS "商品名"
, CASE
WHEN CATEGORY IS NULL AND PRODUCT_NAME IS NULL
THEN NULL
ELSE CATEGORY || ':' || PRODUCT_NAME
END AS "分類:商品名"
FROM
PRODUCTS;
条件分岐をすべて自分で書く必要があります。NULLIFを使えば値が等しい場合はNULLにするという処理をシンプルに表現することができます。
まとめ
NULLIF を使えば値を比較して等しい場合はNULLになる。ということを覚えておきましょう!
コメント