受講料が最大70%OFF 受講料が最大70%OFF

MySQLのIFNULL関数について聞いたことがないという方もいるかもしれません。確かにIFNULL関数は、MySQLを使い始めた人にとってはあまり使うことがない関数。しかし、知っておくと意外なところで便利な使い方ができる関数なのです。

今回の記事では、MySQLのIFNULL関数の概要について分かりやすく説明をしつつ、IFNULL関数を体験できるハンズオンを紹介。本記事を読み、MySQLのIFNULL関数をマスターしましょう!

本記事の要点
  • MySQLのIFNULL関数は、NULL値を他の文言に置き換えられる関数
  • MySQLを使ったIFNULLのハンズオン

MySQLのIFNULL関数とは?

MySQLのIFNULL関数とは、NULLの値を指定した値に置換することができる関数です。

もしデータベースのテーブル上にNULLの値がある場合、SELECT文で取得すると、そのまま「NULL」と表示されてしまいます。データベースの使用者が自分だけであれば、そのままでも問題はないかもしれません。しかし、もしWEBアプリケーションをデプロイした場合、ユーザーの目に触れることもありえます。

MySQLなどのデータベースに対してある程度の知識がある人なら「NULL」と書かれていても「値がNULLなのだ」と理解できますが、データベースについて知識がない人からすると理解できないでしょう。理解できない結果が返ってくることで、WEBアプリケーションに対するユーザーの信頼度は著しく損なわれます。

そこで「NULL」を「値がない状態です」などの文言に置き換えてあげると良いでしょう。知識のないユーザー目線からすれば、分かりやすい表示だと言えます。

「NULL」の値を他の文言に置き換えたい時に活躍するのがMySQLのIFNULL関数なのです。

ポテパンダの一言メモ

ちなみにIFNULL関数は、関係データベース管理システム(RDBMS)の中でもMySQLでしか使用できません。ただ、他の関係データベース管理システム、例えばOracleでは「NVL」関数、PostgreSQLでは「COALESCE」関数など、IFNULL関数と同じ役割を果たす関数が用意されています。普段MySQLを使用していないという方は、使い慣れた関係データベース管理システムにおいてIFNULL関数と同様の役割を果たす関数を使用してみるか、これを機にOracleを使ってみるといいでしょう。

MySQL IFNULL関数の構文

MySQL IFNULL関数の構文は以下の形式です。

IFNULL関数の構文

SELECT IFNULL(カラム名, ‘置き換える値’) FROM テーブル名;

SELECTステートメントは、テーブルの指定カラムからレコード内データを取得する働きがあります。SELECTステートメントで指定したカラム自体をIFNULLの第1引数に設定し、第2引数に置き換える値を設定しましょう。

イメージがしづらい人は、SELECTステートメントの構文を確認してみることで、IFNULL関数の構文が整理できるはずです。

SELECT文

SELECT カラム名 FROM テーブル名;

MySQL IFNULL関数の使用例

こちらでMySQLのIFNULL関数を実際に使用した例をご紹介します。

以下のようなテーブルがある前提で説明を進めます。

animalsテーブル

+--------+------+
| animal | age  |
+--------+------+
| cat    | NULL |
| dog    |   12 |
| tiger  |   20 |
| lion   | NULL |
+--------+------+

現在、animalsテーブルには「animal(動物の名前)」カラムと「age(年齢)」カラムの2つがあります。しかし「dog」と「lion」レコードの「age」カラムにはNULLが入っています。そこで「NULL」を「年齢不詳」という文言に置き換えて取得してみましょう。

IFNULLを含むSELECTステートメント

SELECT animal, IFNULL(age, '年齢不詳') FROM animals;

出力結果

+--------+-----------------------------+
| animal | IFNULL(age, '年齢不詳')     |
+--------+-----------------------------+
| cat    | 年齢不詳                    |
| dog    | 12                          |
| tiger  | 20                          |
| lion   | 年齢不詳                    |
+--------+-----------------------------+
4 rows in set (0.01 sec)

IFNULLでの置換が反映したテーブルが出力されました。このようにレコード内にNULLが入っていれば、簡単に別のキーワードへと置き換えることができます。

【関連記事】
▶︎【ハンズオン】SQLのNVL関数とは?概要や使い方を丁寧に説明!
▶︎MySQLのNULL判定はどうやる? 除外判定やNULLのSUMを取得するには?

MySQLでCASEハンズオンにトライ

こちらでは、実際にMySQLというデータベースを使用してCASEを使ってみましょう。

準備

まずはMySQLを使用するための準備をしていきます。

MySQLのインストール・接続

まだMySQLをインストールしていない場合は、インストールしましょう。

$ brew install mysql

MySQLのインストールが終了したら、接続します。

$ sudo mysql -u root -p

データベースの作成

次にデータベースをMySQL上に作成し、使用するデータベースを指定しましょう。

mysql> CREATE DATABASE potepan;
Query OK, 1 row affected (0.00 sec)

mysql> USE potepan;

これでMySQLを使用する準備は完了しました。

ベースとなるテーブルの作成

次にベースとなるテーブルを作成しましょう。

CREATE TABLE products (name VARCHAR(50), stock INT, expiration_date DATE);

上記のテーブルは以下の想定でレコードの挿入を行います。

実際にINSERTステートメントを使用して、レコードの挿入を行いましょう。

INSERT INTO products VALUES('Milk', NULL, '2019-12-18'),('Cookie', 20, NULL),(NULL,
Query OK, 4 rows affected (0.00 sec)

テーブルの状態

SELECT * FROM products;
+-------------+-------+-----------------+
| name        | stock | expiration_date |
+-------------+-------+-----------------+
| Milk        |  NULL | 2019-12-18      |
| Cookie      |    20 | NULL            |
| NULL        |    15 | NULL            |
| Apple juice |    50 | 2019-12-25      |
+-------------+-------+-----------------+
4 rows in set (0.00 sec)

単一レコードにおけるNULLの置き換え

まずは先ほど提示した例の通り、単一レコード内にあるNULL値を他の文言に置き換えてみましょう。「stock」カラムのNULL値を「在庫数不明」という文言に置き換えます。

IFNULLを含むSELECTステートメント

SELECT name, IFNULL(stock, '在庫数不明'), expiration_date FROM products;

出力結果

+-------------+----------------------------------+-----------------+
| name        | IFNULL(stock, '在庫数不明')      | expiration_date |
+-------------+----------------------------------+-----------------+
| Milk        | 在庫数不明                       | 2019-12-18      |
| Cookie      | 20                               | NULL            |
| NULL        | 15                               | NULL            |
| Apple juice | 50                               | 2019-12-25      |
+-------------+----------------------------------+-----------------+
4 rows in set (0.00 sec)

上記のSELECTステートメントで、stockカラムのNULL値を想定どおり置き換えることができました。

複数レコードにおけるNULLの一括置き換え

IFNULLにカラムを一括指定することで、全てのNULL値を指定した文言に置き換えることも可能です。

IFNULLを含むSELECTステートメント

SELECT IFNULL(name, '商品名不明'), IFNULL(stock, '在庫数不明'), IFNULL(expiration_date, '賞味期限不明') FROM products;

出力結果

+---------------------------------+----------------------------------+-----------------------------------------------+
| IFNULL(name, '商品名不明')      | IFNULL(stock, '在庫数不明')      | IFNULL(expiration_date, '賞味期限不明')       |
+---------------------------------+----------------------------------+-----------------------------------------------+
| Milk                            | 在庫数不明                       | 2019-12-18                                    |
| Cookie                          | 20                               | 賞味期限不明                                  |
| 商品名不明                      | 15                               | 賞味期限不明                                  |
| Apple juice                     | 50                               | 2019-12-25                                    |
+---------------------------------+----------------------------------+-----------------------------------------------+
4 rows in set (0.00 sec)

IFNULLの第1引数に各カラムを設定し、第2引数に置き換えたい文言をそれぞれ設定することで、思惑通り置き換えることができました。長いSELECTステートメントですが、やっていること自体は1つ目のハンズオンと特に変わりません。

まとめ

今回の記事では、MySQLのIFNULL関数の概要について分かりやすく説明をしつつ、IFNULL関数を体験できるハンズオンを紹介していきました。馴染みのない関数だったかもしれませんが、SELECTステートメントと共に気軽に使用することができ、使い勝手の良い関数です。データベースを操作する際には、IFNULL関数があることを意識しておくことでユーザビリティが高まりそうですね。

【関連記事】
▶︎MySQLのWHERE LIKEで検索機能向上!パターンマッチを学ぶ
▶︎MySQL初心者にマスターしてほしいコマンドラインからの使用方法

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

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

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

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

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

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

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

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

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

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

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