SQLのNULLを扱う関数(IFNULL、COALESCE)を使ってみよう!

 2024.10.18  株式会社システムインテグレータ

今回の初心者訓練所#19は、扱いを間違えると厄介なNULL値を判定する2つの関数について説明していきます。使用方法が似ているので、2つの関数をまとめて覚えてしまいましょう。いつもの「SQLite」を使用して進めていきますので、是非、「SQLite」をインストールしてから読み進めてください。

IFNULL関数

IFNULL関数は、最初に指定した引数の値がNULLの場合は、次の引数の値を返し、NULL以外の場合は最初に指定した引数の値を返します。
構文は以下となります。

IFNULL ( 項目X , 項目Y )

準備として、確認用のテーブルを作成してデータを挿入してみましょう。

create table tbl_employees (emp_code integer , emp_name text , kana text , gender text , birthday text , dept_code integer);
insert into tbl_employees values 
('1','HoriiTaro','ホリイタロウ','M','1970-12-27','1'),
('2','IshimuraHana',NULL,'F','1981-09-01','2'),
('3',NULL,NULL,'F','1981-11-30','3'),
('4','MuroiYuri',NULL,'F','1982-02-12','1'),
('5','KitazawaAika','キタザワアイカ','F','1980-08-05','1'),
('6','MitaniKoukiti','ミタニコウキチ','M','1979-03-16','2');

blog19-01

出力フォーマットを調整して、SELECT文で登録内容を確認してみましょう。

.headers on (ヘッダ情報を出力)
.mode column (カラム毎に左揃え出力)

select * from tbl_employees;

blog19-02
insert文で作成した6件のデータを確認できます。

それでは、IFNULL関数を使用して、「kana」がNULLの場合は「emp_name」を表示するSELECT文を試してみましょう。

select emp_code , emp_name , IFNULL( kana , emp_name ) as kana 
from tbl_employees;
 
blog19-03
「kana」がNULLのデータは、「emp_name」が表示されていることが確認できます。「emp_code = 3」のデータは、「emp_name」もNULLになっているので、「kana」はNULLが表示されています。

COALESCE関数

COALESCE関数は、NULLではない最初の引数の値を返します。引数は複数指定可能で指定した順番に判断していきます。引数を2つのみ指定した場合は、IFNULL関数と同様の結果となります。

構文は以下となります。

COALESCE ( 項目X , 項目Y , ・・・ )

先程作成したテーブル「tbl_employees」を使用して確認してみましょう。
COALESCE関数を使用して、IFNULL関数と同様に「kana」がNULLの場合は「emp_name」を表示するSELECT文を試してみましょう。

select emp_code , emp_name , COALESCE ( kana , emp_name ) as kana 
from tbl_employees;

blog19-04

IFNULL関数と同様の結果が確認できます。

それでは次に、「kana」、「emp_name」の両方がNULLの場合は「no_name」という文字を表示するSELECT文を確認してみましょう。

select emp_code , emp_name , COALESCE( kana , emp_name , 'no_name' ) as kana 
from tbl_employees;

blog19-05

「emp_code = 3」の行の「kana」に「no_name」が表示されていることが確認できます。

説明は以上となります。

おすすめの学習コンテンツ

本記事を読み終わって、さらに学びたい方、次は問題にチャレンジしてみたい方には、以下の無料コンテンツをご用意しておりますので、ぜひ活用してみてください!

SQLiteについて
・本記事で使用したデータベース「SQLite」について解説する記事です。
 SQLiteとは?他のデータベースとの違いも解説

SQLの教科書
 ビックデータ時代の必須科目「SQLの教科書」(初級編)
 ビックデータ時代の必須科目「SQLの教科書」(中級編 UPDATE文)
 ビックデータ時代の必須科目「SQLの教科書」(中級編 テーブル結合)
 ビックデータ時代の必須科目「SQLの教科書」(中級編 関数ピックアップ) NEW!!

SQL無料トライアルテスト
・TOPSIC-SQLの無料トライアルテストをご受験していただけます。
 TOPSIC-SQL無料トライアルテスト

SQLコンテスト
・簡単な会員登録をするだけでSQLのオンラインコンテストに無料で参加できます。
    過去に開催されたコンテストの問題にもチャレンジできます。
 TOPSIC SQL CONTEST

SQL基礎解説YouTube
・「TOPSIC-SQL」を元にしたオンラインウェビナーです。
 SQL-BOOT CAMP #1 
 ビッグデータ時代の必須科目SQLを学ぶ「実戦で通用する武器を身につけよう!」

あとがき

「初心者訓練所」の第19弾では、データベース操作においてNULL値の取り扱いを柔軟かつ効率的に行うための非常に便利な関数を説明してきました。これらの関数をうまく活用することで、NULL値を含むデータベースのクエリの書き方がシンプルになり、予期しないNULL値の処理を効果的に行うことができます。NULL値の取り扱いに困ったときは、今回学んだ IFNULL 関数および COALESCE 関数を思い出し、適用してみてください。この記事が、皆さんの日常的なデータベース操作の中で役立つことができれば幸いです。

(株)システムインテグレータ TOPSICチーム 元鬼軍曹 久保 司


RELATED POST関連記事


RECENT POST「SQL‐BOOTCAMP」の最新記事


SQL‐BOOTCAMP

SQLの日付・時間関数(DATE、TIME、DATETIME、JULIANDAY、STRFTIME)を使ってみよう!

SQL‐BOOTCAMP

SQLのウィンドウ関数(LAG、LEAD、FIRST_VALUE、LAST_VALUE、NTH_VALUE)を使ってみよう!

SQL‐BOOTCAMP

SQLのウィンドウ関数(PERCENT_RANK、CUME_DIST、NTILE)を使ってみよう!

SQL‐BOOTCAMP

SQLのウィンドウ関数(ROW_NUMBER、RANK、DENSE_RANK)を使ってみよう!

SQLのNULLを扱う関数(IFNULL、COALESCE)を使ってみよう!

TOPSIC TOPへ