1. はじめに
Oracleデータベースを扱う上で、NULL
値の扱いは避けて通れません。本記事では、NULL
値を操作する上で便利な2つの関数、nullif
とcoalesce
について、その基本から業務での応用までを丁寧に解説します。
リンク
リンク
リンク
2. nullif関数
nullifとは?
nullif
は、2つの値が等しい場合にNULL
を返し、異なる場合にはそのまま最初の値を返すシンプルな関数です。
図解
値A: 3000 値B: 3000
↓ 等しい場合
結果: NULL
値A: 3000 値B: 2000
↓ 異なる場合
結果: 3000
構文
NULLIF(expr1, expr2)
用途例
- 重複データを特定し無効化する。
- デフォルト値を排除する。
実践例: 重複値を排除する
例として、給与(salary
)と歩合(commission
)が同じ場合に歩合をNULL
として扱います。
SELECT
emp_id,
emp_name,
salary,
commission,
NULLIF(salary, commission) AS adjusted_commission
FROM
employees;
3. coalesce関数
coalesceとは?
coalesce
は、複数の値を順に評価し、最初にNULL
でない値を返します。
図解
値A: NULL 値B: 2000 値C: 3000
↓ 最初にNULLでない値を選ぶ
結果: 2000
構文
COALESCE(expr1, expr2, ..., exprn)
用途例
- デフォルト値の設定。
- 動的な値の優先順位付け。
実践例: 歩合がない場合の代替値
歩合が設定されていない場合に給与を代わりに使用し、それもNULL
なら0
を返す例。
SELECT
emp_id,
emp_name,
salary,
commission,
COALESCE(commission, salary, 0) AS final_value
FROM
employees;
4. サンプル表とデータの準備
以下のSQLを使用して、employees
表を作成し、データを挿入してください。
表の作成
CREATE TABLE employees (
emp_id NUMBER,
emp_name VARCHAR2(50),
salary NUMBER,
commission NUMBER
);
データの挿入
INSERT INTO employees (emp_id, emp_name, salary, commission) VALUES (1, 'John', 3000, NULL);
INSERT INTO employees (emp_id, emp_name, salary, commission) VALUES (2, 'Jane', 4000, 500);
INSERT INTO employees (emp_id, emp_name, salary, commission) VALUES (3, 'Alice', NULL, NULL);
INSERT INTO employees (emp_id, emp_name, salary, commission) VALUES (4, 'Bob', 2000, 300);
COMMIT;
5. 実行結果
以下のSQLを実行し、結果を確認してください。
nullifの結果
SELECT
emp_id,
emp_name,
salary,
commission,
NULLIF(salary, commission) AS adjusted_commission
FROM
employees;
emp_id | emp_name | salary | commission | adjusted_commission |
---|---|---|---|---|
1 | John | 3000 | NULL | 3000 |
2 | Jane | 4000 | 500 | 500 |
3 | Alice | NULL | NULL | NULL |
4 | Bob | 2000 | 300 | 300 |
coalesceの結果
SELECT
emp_id,
emp_name,
salary,
commission,
COALESCE(commission, salary, 0) AS final_value
FROM
employees;
emp_id | emp_name | salary | commission | final_value |
---|---|---|---|---|
1 | John | 3000 | NULL | 3000 |
2 | Jane | 4000 | 500 | 500 |
3 | Alice | NULL | NULL | 0 |
4 | Bob | 2000 | 300 | 300 |
6. 業務での応用例
ケース1: ボーナス計算
ボーナスを給与の10%とするが、歩合がある場合はそれを優先。
SELECT
emp_id,
emp_name,
COALESCE(commission, salary * 0.1, 0) AS bonus
FROM
employees;
ケース2: 顧客データの整備
連絡先がない場合に「情報なし」と表示。
SELECT
customer_id,
COALESCE(email, phone, '情報なし') AS contact_info
FROM
customers;
7. 注意点とベストプラクティス
- nullifの注意点
NULL
が返されると後続の計算でエラーが発生する場合があるため、注意が必要です。 - coalesceのパフォーマンス
引数が多い場合、最初にNULL
でない値が見つかるまで全て評価されるため、パフォーマンスを考慮する必要があります。
8. まとめ
nullif
とcoalesce
は、データベースにおけるNULL
値処理の強力なツールです。これらを適切に活用することで、データの品質向上や業務効率化が可能です。ぜひ、この記事を参考に実践に取り入れてみてください!
[参考]
Oracle Database SQL言語リファレンス 19c
コメント