【Oracle】NULL値を別の値に置き換える関数を解説!(NVL、COALESCE)

スポンサーリンク

データベースを扱う際、NULL 値は避けて通れない存在です。NULL は「値が存在しない」ことを意味し、数値の計算や文字列の結合時に思わぬ動作を引き起こすことがあります。

例えば、以下のような計算を行うと、意図しない結果になることがあります。

SELECT 100 + NULL FROM dual;  -- 結果は NULL

また、検索条件においても NULL が含まれると、想定したデータが取得できない場合があります。

SELECT * FROM users WHERE name = NULL;  -- データは取得されない

このような問題を回避するために、Oracle では NULL 値を別の値に置き換えるための関数が用意されています。本記事では、代表的な NVLNVL2COALESCECASE を使った方法について解説します。

NULL値を置き換える関数

Oracleでは、NULL 値を別の値に置き換えるために、いくつかの関数が用意されています。ここでは、代表的な NVLNVL2COALESCECASE文 を使った方法を紹介します。

NVL関数

NVL 関数は、NULL の場合に指定した値を代わりに返します。シンプルで使いやすいため、NULL値の置き換えで最もよく使用される関数の1つです。

NVL(値, 置き換える値)
  • :NULLかもしれない値
  • 置き換える値:値がNULLだった場合に返す値

使用例

SELECT NVL(NULL, 'デフォルト値') FROM dual;

実行結果

デフォルト値

NVL2関数

NVL2 は、NVL より少し高度な処理ができます。対象の値が NULLでない場合NULLの場合 で異なる値を返すことができます。

NVL2(値, 非NULL時の値, NULL時の値)
  • :NULLかもしれない値
  • 非NULL時の値:値がNULLでない場合に返す値
  • NULL時の値:値がNULLだった場合に返す値

使用例

SELECT NVL2(NULL, '値あり', '値なし') FROM dual;

実行結果

値なし

COALESCE関数

COALESCE は、複数の値の中から 最初にNULLでない値 を返します。NVL の拡張版のようなものです。

COALESCE(値1, 値2, ..., 値N)
  • 値1, 値2, ..., 値N:左から順に評価され、最初にNULLでない値を返す

使用例

SELECT COALESCE(NULL, NULL, '最初の非NULL値', '次の値') FROM dual;

実行結果

最初の非NULL値

CASE文を使ったNULL値の置き換え

CASE 文を使えば、より柔軟なNULL値の処理が可能です。他の関数では対応しにくい複雑な条件分岐を設定できます。

CASE 
    WHEN 値 IS NULL THEN 置き換える値 
    ELSE 値 
END

使用例

SELECT 
    CASE WHEN NULL IS NULL THEN '代替値' ELSE '元の値' END 
FROM dual;

実行結果

代替値

まとめ

本記事では、OracleでNULL値を別の値に置き換えるための方法として、NVL、NVL2、COALESCE、CASE文 を紹介しました。

各関数の違いと使い分け

関数名主な用途特徴
NVLシンプルなNULL置き換えNULL時に指定した値を返す
NVL2NULLかどうかで異なる値を返すNULLでない場合とNULLの場合で異なる値を指定可能
COALESCE複数の値の中で最初の非NULLを取得複数の候補から最初のNULLでない値を返す
CASE文柔軟な条件分岐が可能NULLに限らず、さまざまな条件を指定できる

実務での活用ポイント

  • 単純にNULLを特定の値に変えたい場合NVL を使う
  • NULLと非NULLで異なる処理をしたい場合NVL2 を使う
  • 複数のカラムの値をチェックしながらNULLを補完したい場合COALESCE を使う
  • 複雑な条件分岐をしたい場合CASE を使う

パフォーマンスの考慮

  • NVLCOALESCE は比較的軽量な処理であるため、日常的なデータ処理での使用に適しています。
  • CASE 文はより柔軟な処理が可能ですが、長くなると可読性が落ちるため、シンプルな置き換えなら NVLCOALESCE を優先するとよいでしょう。

NULLの扱いはデータベース設計やSQLの処理において非常に重要です。今回紹介した関数を適切に使い分けることで、より堅牢なSQLを記述できるようになります。ぜひ実際の開発やデータ分析に活用してみてください!

Oracle
スポンサーリンク
なんくるをフォローする

コメント

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