【Oracle】NULLIF関数の使い方

Oracle

今回は、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になる。ということを覚えておきましょう!

コメント

タイトルとURLをコピーしました