SQLのNVLとは?Oracle以外の利用方法も合わせて解説!
SQL
SQLのNVLとは?Oracle以外の利用方法も合わせて解説!
アンドエンジニア編集部
2021.09.09
この記事でわかること
SQLのNVL関数とはNull Value Logicの略で、NULL値を別の値に変換する関数を指します
NVL関数はOracleが独自実装した関数で、Oracleのみで利用できます
NVL関数と同等のCOALESCE関数は各RDBMSで利用可能な共通仕様の関数でおすすめです

SQLのNVL関数とは?

SQL

SQLはリレーショナルデータベース管理システム(RDBMS)で用いられるデータベース操作言語です。データベース操作言語とは、データの操作や定義を行う言語を指します。

SQLのNVL関数とはNull Value Logicの略で、NULL値を別の値に変換する関数です。NULL値とはNULLが入っているわけではなく、値が入っていないことを指します

NVLの使い方は?

NVL関数Oracleが独自実装した関数で、Oracleのみで利用できます。 構文:  NVL(expr 1, expr 2)  expr 1 NULLかどうかを調べる値を代入します。  expr 2 expr 1がNULLの場合に返す値を指定します。データ型はexpr 1と同じ型に揃えます。 用法:  SELECT NVL(カラム名, ‘置き換える値’) FROM テーブル名;

NVLの引数は文字列なため、数値がNULLがどうか確認したい場合はTO_CHAR関数を使用します。 構文:  NVL(TO_CHAR(expr1),expr2) 用法:  SELECT NVL(TO_CHAR(カラム名,書式), ‘置き換える値’) FROM テーブル名;

NVLとNVL2の違いは?

NVL関数NVL2関数Oracleが独自実装した関数なため、共にOracleのみで利用できます。ここでは、NVL2関数の使い方NVLとの違いを見ていきます。 構文:  NVL2(expr 1, expr 2, expr 3)  expr 1 NULLかどうかを調べる値を代入します。  expr 2 expr 1がNULL以外の場合に返す値を指定します。データ型はexpr 1と同じ型に揃えます。  expr 3 expr 1がNULLの場合に返す値を指定します。データ型はexpr 1と同じ型に揃えます。 用法:  SELECT NVL2(カラム名, ‘NULL以外のとき置き換える値’, ‘NULLのとき置き換える値’) FROM テーブル名;

NVL関数とNVL2関数との違いはすでにお気づきの通り引数が追加されていることです。引数の違いNVL2関数では第2引数にNULL以外の場合に返す値を指定できます。

NVLとCOALESCEの違いは?

ここまでNVL関数について説明しました。NVL関数はOracleが独自実装した関数なため、Oracle以外のRDBMSでは利用することができません。

ここでは、COALESCE関数について説明していきます。COALESCEは英語の「合体する」が由来で、読み方はコウアレスです。COALESCE関数Oracleをはじめ、MySQL・PostgreSQL・SQLServerで利用可能な共通仕様の関数です。したがって各種RDBMSで汎用的に利用するSQL文を作成する際には、COALESCE関数をおすすめします。 構文:  COALESCE(expr 1, expr 2)  expr 1 NULLかどうかを調べる値を代入します。  expr 2 expr 1がNULLの場合に返す値を指定します。データ型はexpr 1と同じ型に揃えます。 用法:  SELECT COALESCE(カラム名, '置き換える値') FROM テーブル名;

NVLを各RDBMSで利用するには

SQL access

NVL関数Oracleが独自実装した関数なため、Oracle以外のRDBMSでは利用することができません。

COALESCE関数はOracleをはじめ、MySQL・PostgreSQL・SQLServerで利用可能な共通仕様の関数です。したがって、各種RDBMSで汎用的に利用するSQL文を作成する際にはCOALESCE関数をおすすめします。

さらに、COALESCE関数では複数の引数のNULL値の判断を行うことができます。NVL関数と同じ使い方という訳ではありませんが、参考情報として記載しておきます。 構文:  COALESCE(expr 1, expr 2, …, expr n)  expr 1 NULLかどうかを調べる表現式を代入します。      NULL以外の場合、その値を返します。NULLの場合はexpr 2を評価します。  expr 2 NULLかどうかを調べる表現式を代入します。      NULL以外の場合、その値を返します。NULLの場合は次の表現式を評価します。   :  expr n expr 1からexpr n-1までが全てNULLの場合に返す値を指定します。データ型はexpr 1と同じ型に揃えます。

NVLをSQLServerで使うには?

NVL関数をSQLServerで使うにはCOALESCE関数の他、ISNULL関数が利用できます。 構文:  ISNULL(expr 1, expr 2)  expr 1 NULLかどうかを調べる値を代入します。  expr 2 expr 1がNULLの場合に返す値を指定します。データ型はexpr 1と同じ型に揃えます。 用法:  SELECT ISNULL(カラム名, '置き換える値') FROM テーブル名;

NVLをMySQLで使うには?

NVL関数をMySQLで使うにはCOALESCE関数の他、IFNULL関数が利用できます。 構文:  IFNULL(expr 1, expr 2)  expr 1 NULLかどうかを調べる値を代入します。  expr 2 expr 1がNULLの場合に返す値を指定します。データ型はexpr 1と同じ型に揃えます。 用法:  SELECT IFNULL(カラム名, '置き換える値') FROM テーブル名;

NVLをPostgreSQLで使うには?

PostgreSQLではNVL関数に相当する独自実装の関数はありません。そのため、NVL関数をPostgreSQLで使うにはCOALESCE関数を利用します。COALESCE関数は共通仕様なため、Oracle・MySQL・PostgreSQL・SQLServer共通で利用できるメリットがあります。

NVL2を各DBMS利用するには?

NVL2関数Oracleが独自実装した関数です。そのためOracle以外のRDBMSでは利用することができません。Oracle以外でNVL2関数に相当する処理を行う際にはCASE式を用います。

CASE式の構文は以下の通りです。 構文:  CASE expr    WHEN comparison_expr1 THEN return_expr1    WHEN comparison_expr2 THEN return_expr2    [WHEN comparison_exprn THEN return_exprn ...]    [ELSE return_default]  END  expr           評価する表現式  comparison_expr1/2/,,n exprと比較する表現式  return_expr1/2/,,n     真偽判定で真(TRUE)の場合返す値  return_default      真偽判定で偽(FALSE)の場合返す値

ここでNVL2関数の処理を振り返ってみます。NVL2関数の構文と用法は以下の通りです。 構文:  NVL2(expr 1, expr 2, expr 3)  expr 1 NULLかどうかを調べる値を代入します。  expr 2 expr 1がNULL以外の場合に返す値を指定します。データ型はexpr 1と同じ型に揃えます。  expr 3 expr 1がNULLの場合に返す値を指定します。データ型はexpr 1と同じ型に揃えます。 用法:  SELECT NVL2(カラム名, ‘NULL以外のとき置き換える値’, ‘NULLのとき置き換える値’) FROM テーブル名;

NVL2関数CASE式で実装するには、IS NOT NULL演算子IS NULL演算子を利用します。最初にIS NOT NULL演算子IS NULL演算子の一般用法を説明します。 用法:  SELECT 抽出カラム   CASE    WHEN カラム名 IS NULL THEN ‘NULLのとき置き換える値’    WHEN カラム名 IS NOT NULL THEN  ‘NULL以外のとき置き換える値’   END   FROM テーブル名

ここでNVL2関数をCASE式で実装するには、ELSEIS NOT NULL演算子だけでも同等の処理が行えます。具体的には、WHENIS NOT NULL演算子の真偽が真(TRUE)の場合はNULLではないので、‘NULL以外のとき置き換える値’を返します。ELSEは上記以外なため、NULLが該当します。そのため戻り値は‘NULLのとき置き換える値’とします。 用法:  SELECT 抽出カラム   CASE    WHEN カラム名 IS NOT NULL THEN ‘NULL以外のとき置き換える値’    ELSE ‘NULLのとき置き換える値’   END   FROM テーブル名

ここでIS NOT NULL演算子ではなくIS NULL演算子の場合、‘NULLのとき置き換える値’を返し、ELSE‘NULL以外のとき置き換える値’を返す場合も同等の処理となります。

SQLのNVLで抽出データを整理しましょう

working

個人で管理するデータベースであればNULL値があったとしても「NULL」と表示されるだけなため影響がありません。しかしながら、企業のシステムアンケートシステムであれば顧客情報の住所・電話番号・性別等は抜け漏れが多数あります。そのため、単に「NULL」と表示されるよりは「記載なし」とか「不明」などの方が分かりやすく親切です。

NVL関数が理解できたところで、ぜひデータベースの抽出データに活用することをおすすめします。抽出データを整理することで分かりやすい集計結果が得られますので、ぜひお試しください。

気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT