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) になります。
IFNULL() 関数を使ってみましょう。
SELECT IFNULL(5, 'ABC'),
IFNULL('','ABC'),
IFNULL(NULL,'ABC');
[実行結果]
第一引数が NULL の時だけ、第二引数の 'ABC' が返っています。
次のような exam_results テーブルがあります。
NULLIF() 関数を使って、この exam_results テーブル の score カラムの値が NULL の時は 'N/A' という文字列を返したい時には次のようにできます。
SELECT score,
NULLIF(score, 'N/A')
FROM exam_results;
[実行結果]
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');
[実行結果]
二つの引数が = の NULLIF('a', 'a') は NULL が返っていて、それ以外は第一引数が返っています。
NULLIF() 関数は、空文字列 '' の時に NULL に置き換えたい時にも便利です。
例えば、students テーブルの gender カラムが nullable だとして、 gender がわからない時に空白ではなく NULL に変換して保存したいような状況です。
以上、MySQL の IFNULL() と NULLIF() 関数についてご説明しました。