Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQL文のNVL関数をはじめて聞く人もいるかもしれません。メジャーな関数と比べると登場するシーンは少ないのですが、知っておくと意外と便利な関数なのです。

今回の記事では、SQL文のNVL関数の概要について丁寧に説明をしつつ、NVL関数の使い方や実際に手を動かしてNVL関数を体験できるハンズオンをご紹介していきます。

SQL文のNVL関数とは?

SQL文のNVL関数とは、NULL値を他の値に置き換えることができる関数です。

データベース上に作成したテーブルにおいてNULL値が登録された場合、そのまま「NULL」と表示されます。自分だけでデータベースを使用するのであれば、そのままでも問題はありませんが、場合によっては第三者の目に触れることもあるでしょう。

データベースに対して知見のある人であれば、「NULL」と書かれていることで「値がNULLなのだ」と理解できますが、知見がない人の場合、理解することができません。

そのような場合、「NULL」を「値が入っていません」などの文言に置き換えてあげれば、ユーザー目線としては分かりやすい表示となります。

上記で説明したシチュエーションのように、「NULL」の値を他の値に置き換えることができるのがNVL関数なのです。

ポテパンダの一言メモ

ちなみにNVL関数は、関係データベース管理システム(RDBMS)の中でもOracleでしか使用することができません。ただ、他の関係データベース管理システム、例えばMySQLなどでは「ifnull」関数など、NVL関数と同様の役割を果たす関数があります。普段Oracleを使用していないという人は、これを機にOracleを使ってみるか、使い慣れた関係データベース管理システムにおいて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エンジニアへの転職を考えている方は、是非一度無料カウンセリングへお申込みください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。