【Oracle】NULLを別の値に置き換えよう(NVL)

Oracle

今回は、NULLを別の値に置き換える方法について説明します!※NULLを別の値に置き換える場合、「CASE式」や「NVL関数」が使われることが多いです

データ準備

CASE式やNVL関数を試すために、テーブルを作成しデータを追加します。

-- 従業員テーブル
CREATE TABLE employees (
    employee_id NUMBER PRIMARY KEY,
    employee_name VARCHAR2(50),
    salary NUMBER,
    bonus NUMBER
);

-- データ追加 
INSERT
  ALL INTO employees
VALUES
  (1, '山田太郎', 150000, 30000)
INTO
  employees
VALUES
  (2, '佐藤花子', 200000, NULL)
INTO
  employees
VALUES
  (3, '鈴木一郎', 180000, 20000)
INTO
  employees
VALUES
  (4, '田中次郎', NULL, NULL)
INTO
  employees
VALUES
  (5, '高橋花子', 150000, NULL)
INTO
  employees
VALUES
  (6, '伊藤太郎', 300000, NULL)
INTO
  employees
VALUES
  (7, '中村一郎', 500000, NULL)
INTO
  employees
VALUES
  (8, '小林次郎', 100000, 100000)
INTO
  employees
VALUES
  (9, '加藤花子', 40000, 10000)
INTO
  employees
VALUES
  (10, '松本太郎', 250000, 100000)
SELECT
 *
FROM
  DUAL;
従業員ID氏名給料ボーナス
1山田太郎15000030000
2佐藤花子200000
3鈴木一郎18000020000
4田中次郎
5高橋花子150000
6伊藤太郎300000
7中村一郎500000
8小林次郎100000100000
9加藤花子4000010000
10松本太郎250000100000
従業員テーブル

給料とボーナスがところどころNULLになっている従業員テーブルができました。2つのやり方(CASE式NVL関数)でNULLの値を0に置換したいと思います。田中次郎さんは…もはや働いていない?

CASE式を使う方法

CASE式でNULLを置き換える場合は下記のように書いてみましょう。

CASE 
    WHEN カラム名 IS NULL THEN  置き換える値
    ELSE カラム名 
END

値が NULL だったら 0 。それ以外はそのまま表示してみます。

SELECT
  employee_id AS "従業員ID",
  employee_name AS "氏名",
  CASE
    WHEN salary IS NULL THEN 0
    ELSE salary
  END AS "給料",
  CASE
    WHEN bonus IS NULL THEN 0
    ELSE bonus
  END AS "ボーナス"
FROM
  employees
従業員ID氏名給料ボーナス
1山田太郎15000030000
2佐藤花子2000000
3鈴木一郎18000020000
4田中次郎00
5高橋花子1500000
6伊藤太郎3000000
7中村一郎5000000
8小林次郎100000100000
9加藤花子4000010000
10松本太郎250000100000
CASE式を使ってNULLを0に置換

NULLの値が0になりました!CASE式ではもっと細かく値を判定することができます。気になる方は下記の記事を確認してみてください。

では、NVL関数でも同じようにNULLを0に置き換えてみましょう!

NVL関数を使う方法

NVL関数でNULLを置き換える場合は下記のように書いてみましょう。

SELECT
  NVL(カラム名, 置き換える値)
FROM
  テーブル名

CASE式よりもスッキリ書けます。

SELECT
  employee_id AS "従業員ID",
  employee_name AS "氏名",
  NVL(salary, 0) AS "給料",
  NVL(bonus, 0) AS "ボーナス"
FROM
  employees
従業員ID氏名給料ボーナス
1山田太郎15000030000
2佐藤花子2000000
3鈴木一郎18000020000
4田中次郎00
5高橋花子1500000
6伊藤太郎3000000
7中村一郎5000000
8小林次郎100000100000
9加藤花子4000010000
10松本太郎250000100000
NVL関数を使ってNULLを0に置換

NVL関数でも同じようにNULLを0に置換することができました!

まとめ

CASE式、NVL関数を使ってNULLを置換する方法がわかったかと思います。どちらも覚えておくと便利なので、手を動かしながら実際に試してみてください!

コメント