今回は、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 | 山田太郎 | 150000 | 30000 |
2 | 佐藤花子 | 200000 | – |
3 | 鈴木一郎 | 180000 | 20000 |
4 | 田中次郎 | – | – |
5 | 高橋花子 | 150000 | – |
6 | 伊藤太郎 | 300000 | – |
7 | 中村一郎 | 500000 | – |
8 | 小林次郎 | 100000 | 100000 |
9 | 加藤花子 | 40000 | 10000 |
10 | 松本太郎 | 250000 | 100000 |
給料とボーナスがところどころ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 | 山田太郎 | 150000 | 30000 |
2 | 佐藤花子 | 200000 | 0 |
3 | 鈴木一郎 | 180000 | 20000 |
4 | 田中次郎 | 0 | 0 |
5 | 高橋花子 | 150000 | 0 |
6 | 伊藤太郎 | 300000 | 0 |
7 | 中村一郎 | 500000 | 0 |
8 | 小林次郎 | 100000 | 100000 |
9 | 加藤花子 | 40000 | 10000 |
10 | 松本太郎 | 250000 | 100000 |
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 | 山田太郎 | 150000 | 30000 |
2 | 佐藤花子 | 200000 | 0 |
3 | 鈴木一郎 | 180000 | 20000 |
4 | 田中次郎 | 0 | 0 |
5 | 高橋花子 | 150000 | 0 |
6 | 伊藤太郎 | 300000 | 0 |
7 | 中村一郎 | 500000 | 0 |
8 | 小林次郎 | 100000 | 100000 |
9 | 加藤花子 | 40000 | 10000 |
10 | 松本太郎 | 250000 | 100000 |
NVL関数でも同じようにNULLを0に置換することができました!
まとめ
CASE式、NVL関数を使ってNULLを置換する方法がわかったかと思います。どちらも覚えておくと便利なので、手を動かしながら実際に試してみてください!
コメント