2022-04-14
【Oracle】業務で使用するSQL【NVL関数】
業務で最近SQLを読み書きすることが増えてきたので、よく見るワードを忘備録として残して行こうと思います。
NVL関数
NVLとは、Null Value Logicの略。NULLの値を別の値に変換する関数。
文法NVL ( expr1 , expr2 ) return [ 第一引数の型、NULL、または、数値なら優先順位の高い数値型引数expr1 NULL を設定可能な式(数値式、文字列式、日付式、etc) expr2 数値式、文字列式、日付式 expr_list カンマで区切った式のリスト(2つ以上の値リスト) return戻り値式 expr1 が NULL なら 式 expr2 の値、または、expr_list で最初の NULL 以外の値適用SQL および PL/SQL の両方で使用可能。
公式リファレンスより抜粋 https://www.shift-the-oracle.com/sql/functions/nvl-coalesce.html
Oracleが独自に実装した関数で、Oracleでのみ使用できる。
使い方としては
- expr1 : NULLかどうかを調べる値を代入する
- expr2 : expr1がNULLの場合に返す値を指定する。データ型はexpr1と同じ型に揃える。
使用例
以下のようなテーブルがあるとする
Person
food
このテーブルの情報を、SQLを実行して取得しようとすると
SELECT P.NAME
,NVL(F.FOOD_NAME, 'ありません') AS FOOD_NAME
FROM PERSON P
LEFT OUTER JOIN FOOD F
ON P.favorite_food_id = F.food_id
出力結果
以上のように、NULLの場合はデータが取れてこない。
これを、NVL関数を使って記述してみると
SELECT P.NAME
,NVL(F.FOOD_NAME, 'ありません') AS FOOD_NAME
FROM PERSON P
LEFT OUTER JOIN FOOD F
ON P.favorite_food_id = F.food_id
上記のように、NULLになるはずの値に決められた値を挿入することができる。