MySQL の IFNULL()・NULLIF()

ここでは MySQL の IFNULL() と NULLIF() 関数についてご説明します。

サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。

MySQL の IFNULL() 関数の使い方

MySQL の IFNULL() 関数は、引数を二つ受け取り、一つ目の引数が NULL でなければ一つ目の引数を、そうでなければ二つ目の引数を返す関数です。

SQL Server では ISNULL() にあたる関数です。

IFNULL(引数1, 引数2);

IFNULL() 関数の戻り値のデータ型は、引数1 と 引数2 のデータ型が違う場合、STRING、REAL、INTEGER の順番でより汎用的なほうが使われます。

例えば、IFNULL(5, 'ABC') の場合は戻り値は 5 ですが、データ型は varchar(3) になります。

MySQL の IFNULL()・NULLIF() 1


IFNULL() 関数を使ってみましょう。

SELECT 	IFNULL(5, 'ABC'),
		IFNULL('','ABC'),
		IFNULL(NULL,'ABC');

[実行結果]

MySQL の IFNULL()・NULLIF() 2

第一引数が NULL の時だけ、第二引数の 'ABC' が返っています。


次のような exam_results テーブルがあります。

MySQL の IFNULL()・NULLIF() 3


NULLIF() 関数を使って、この exam_results テーブル の score カラムの値が NULL の時は 'N/A' という文字列を返したい時には次のようにできます。

SELECT 	score,
		NULLIF(score, 'N/A')
FROM 	exam_results;

[実行結果]

MySQL の IFNULL()・NULLIF() 4

score が NULL の時は 'N/A' が返っていますね。


MySQL の NULLIF() 関数の使い方

MySQL の NULLIF() 関数は、引数を二つ受け取り、引数1 = 引数2 が True の時は NULL を、そうでない時には一つ目の引数を返す関数です。

NULLIF(引数1, 引数2);

以下の CASE 文と同等です。

CASE 
	WHEN 引数1 = 引数2 
		THEN NULL 
		ELSE 引数1
END;

NULLIF() 関数の引数のどちらかが NULL の時は、引数1 = 引数2 が True にならないため、引数1 が返ります。


それでは、NULLIF() 関数を使ってみましょう。

SELECT 	NULLIF('a', 'b'),
		NULLIF('a', 'a'),
        NULLIF('a', NULL),
		NULLIF(NULL, 'b');

[実行結果]

MySQL の IFNULL()・NULLIF() 5

二つの引数が = の NULLIF('a', 'a') は NULL が返っていて、それ以外は第一引数が返っています。


NULLIF() 関数は、空文字列 '' の時に NULL に置き換えたい時にも便利です。

例えば、students テーブルの gender カラムが nullable だとして、 gender がわからない時に空白ではなく NULL に変換して保存したいような状況です。

MySQL の IFNULL()・NULLIF() 6


以上、MySQL の IFNULL() と NULLIF() 関数についてご説明しました。

© 2024 MySQL 入門