Uenishi.Web

大阪に生息しているプログラマーのブログ

【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になるはずの値に決められた値を挿入することができる。