SQL文のNVL関数をはじめて聞く人もいるかもしれません。メジャーな関数と比べると登場するシーンは少ないのですが、知っておくと意外と便利な関数なのです。
今回の記事では、SQL文のNVL関数の概要について丁寧に説明をしつつ、NVL関数の使い方や実際に手を動かしてNVL関数を体験できるハンズオンをご紹介していきます。
SQL文のNVL関数とは?
SQL文のNVL関数とは、NULL値を他の値に置き換えることができる関数です。
データベース上に作成したテーブルにおいてNULL値が登録された場合、そのまま「NULL」と表示されます。自分だけでデータベースを使用するのであれば、そのままでも問題はありませんが、場合によっては第三者の目に触れることもあるでしょう。
データベースに対して知見のある人であれば、「NULL」と書かれていることで「値がNULLなのだ」と理解できますが、知見がない人の場合、理解することができません。
そのような場合、「NULL」を「値が入っていません」などの文言に置き換えてあげれば、ユーザー目線としては分かりやすい表示となります。
上記で説明したシチュエーションのように、「NULL」の値を他の値に置き換えることができるのがNVL関数なのです。
SQL文 NVL関数の構文
NVL関数の構文は以下のような形式です。
NVL関数の構文
SELECT NVL(カラム名, ‘置き換える値’) FROM テーブル名;
SELECT文については普段から使用している人が多いはずです。そのSELECT文の中で抜き出すカラム名をNVL関数で囲むことで、NULL値を他の値に置き換えることができるのですね。
SELECT文
SELECT カラム名 FROM テーブル名;
このようにNVL関数の構文とSELECT文を比べてみると、カラム名の部分をそのままNVL関数で囲んでいるだけだということが分かります。
NVL関数に置き換わる関数
先ほど「他の関係データベース管理システムにもNVL関数と同様の役割を果たす関数がある」と述べました。実際に、どのような関数があるのか確認していきましょう。
MySQL:IFNULL
SELECT IFNULL(カラム名, '置き換える値') FROM テーブル名;
MySQLではIFNULL関数を用いて、NULLの値を置き換えることができます。第一引数にはNULLかどうかを判定するカラム名を設定し、第二引数にはNULLの場合に置き換える値を設定します。
PostgreSQL:COALESCE
SELECT COALESCE(カラム名, '置き換える値') FROM テーブル名;
PostgleSQLでは、COALESCE関数を用いて、NULLの値を置き換えることができます。第一引数にはNULLかどうかを判定するカラム名を設定し、第二引数にはNULLの場合に置き換える値を設定します。
SQLserver:ISNULL
SELECT ISNULL(カラム名, '置き換える値') FROM テーブル名;
SQLserverでは、ISNULL関数を用いて、NULLの値を置き換えることができます。第一引数にはNULLかどうかを判定するカラム名を設定し、第二引数にはNULLの場合に置き換える値を設定します。
短期集中でWebエンジニアになれるスクール
SQL文 NVL関数を使ってみよう!
それでは早速、NVL関数を使ってみましょう。Oracleを使用できる方は、ぜひ手を動かしてNVL関数の動きを確かめてみてください。また、それ以外の関係データベース管理システムを使用している方は、上記で紹介したNVL関数に置き換わる関数を使用してみましょう。
テーブルの作成
まずは今回のハンズオンで使用するテーブルとその中身を作成しましょう。
CREATE TABLE foods (food_id NUMBER, name VARCHAR(50) , price VARCHAR(50));
INSERT INTO foods ( food_id, name, price) VALUES ('0001', 'Banana', 100); INSERT INTO foods ( food_id, name, price) VALUES ('0002', NULL, 200); INSERT INTO foods ( food_id, name, price) VALUES (NULL, 'Apple', 300); INSERT INTO foods ( food_id, name, price) VALUES ('0004', NULL, NULL); INSERT INTO foods ( food_id, name, price) VALUES (NULL, 'Bread', 500);
これで以下のようなテーブルが作成されました。
SELECT * FROM foods;
+---------+--------+-------+ | food_id | name | price | +---------+--------+-------+ | 1 | Banana | 100 | | 2 | NULL | 200 | | NULL | Apple | 300 | | 4 | NULL | NULL | | NULL | Bread | 500 | +---------+--------+-------+
NULLを他の値に置き換える
では、NVL関数を使ってNULL値を他の値に置き換えてみましょう。
SELECT NVL(food_id, ‘値がありません’) FROM foods;
出力結果
+------------------------------------------+ | IFNULL(food_id, '値がありません') | +------------------------------------------+ | 1 | | 2 | | 値がありません | | 4 | | 値がありません | +------------------------------------------+
もちろんNVL関数の第一引数を変更すれば、他のカラムのNULLを置き換えることができます。
SELECT NVL(price, 1000) FROM foods;
出力結果
+---------------------+ | IFNULL(price, 1000) | +---------------------+ | 100 | | 200 | | 300 | | 1000 | | 500 | +---------------------+
まとめ
今回の記事では、SQL文のNVL関数の概要について丁寧に説明をしつつ、NVL関数の使い方や実際に手を動かしてNVL関数を体験できるハンズオンをご紹介していきました。
自分だけでデータベースを使用している場合には構いませんが、第三者が閲覧する場合にはNULL値を分かりやすい値へ置き換えてあげると丁寧です。ぜひ今回の記事を良い機会にして、SQL文のNVL関数を活用してみてくださいね!
【関連記事】
▶︎【実践編】SQLのIF構文で関数を作ってみよう!基礎的な使い方も解説!
▶︎SQLの達人への第一歩、結合と抽出を同時に処理するINNER JOINの使い方をマスターしよう
▶︎SQL order byでソート指定するサンプルコード集 指定のレコードだけ先頭に並べるには?
SQLを学んでWebエンジニアを目指そう
Webエンジニアは、Webサービスを作るエンジニアで非常に人気の高い職種です。
スタートアップやベンチャー企業が中心なので柔軟性のある雇用形態、魅力的な作業環境、面白いプロジェクト、高い報酬など非常に魅力的な求人が多いです。
Ruby on RailsやGo言語を用いたプロジェクトが多く、SQLも重要なスキルとなります。
このブログを運営するプログラミングスクールのポテパンキャンプでは、実践的なカリキュラムと現役エンジニアからのレビュー、そしてポートフォリオ添削や模擬面談などの面談転職サポートにより、最短距離でWebエンジニアを目指すことができます。
Webエンジニアへの転職を考えている方は、是非一度無料カウンセリングへお申込みください。
ちなみにNVL関数は、関係データベース管理システム(RDBMS)の中でもOracleでしか使用することができません。ただ、他の関係データベース管理システム、例えばMySQLなどでは「ifnull」関数など、NVL関数と同様の役割を果たす関数があります。普段Oracleを使用していないという人は、これを機にOracleを使ってみるか、使い慣れた関係データベース管理システムにおいてNVL関数と同様の役割を果たす関数を使用してみるといいでしょう。