MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのIFNULL()制御フロー関数の使い方と活用例を解説

MySQLのIFNULL()は制御フロー関数の一つで、第1引数がNULLでない場合はその値をそのまま返し、NULLである場合には第2引数の値を返します。データベース操作において、NULL値を別のデフォルト値に置き換えたい場面で非常に便利な関数です。

IFNULL()関数の基本構文

IFNULL(expression1, expression2)

この関数の動作は以下の通りです。

  • expression1(第1引数)がNULLでない場合 → expression1を返す
  • expression1がNULLの場合 → expression2を返す
  • 両方の引数がNULLの場合 → NULLを返す

具体的な使用例

実際にSQLクエリを実行して、IFNULL()関数の挙動を確認してみましょう。

例1:第1引数がNULLの場合

mysql> Select IFNULL(NULL,'Ram');
+--------------------+
| IFNULL(NULL,'Ram') |
+--------------------+
| Ram                |
+--------------------+
1 row in set (0.00 sec)

第1引数がNULLのため、代わりに第2引数の「Ram」が返されています。

例2:第1引数がNULLでない場合

mysql> Select IFNULL('Shyam','Ram');
+-----------------------+
| IFNULL('Shyam','Ram') |
+-----------------------+
| Shyam                 |
+-----------------------+
1 row in set (0.00 sec)

第1引数「Shyam」がNULLではないため、そのまま「Shyam」が返されます。このように、第1引数が有効な値を持つ場合は第2引数は評価されません。

例3:両方の引数がNULLの場合

mysql> Select IFNULL(NULL,NULL);
+-------------------+
| IFNULL(NULL,NULL) |
+-------------------+
| NULL              |
+-------------------+
1 row in set (0.00 sec)

両方の引数がNULLの場合、結果もNULLになります。代替となる値がないためです。

実務での活用シーン

IFNULL()関数は、テーブルのカラムにNULLが含まれる可能性がある場合に特に役立ちます。例えば、顧客の電話番号が未登録の場合に「未登録」という文字列を表示したいときなどに使用できます。

SELECT name, IFNULL(phone_number, '未登録') AS phone FROM customers;

また、集計処理やレポート生成の際に、NULLによる計算エラーや表示崩れを防ぐ目的でも広く使われています。類似の関数としてCOALESCE()がありますが、こちらは3つ以上の引数にも対応できるより汎用的な関数です。

  1. MySQLの<=>演算子とは?NULL安全な等価比較の使い方を解説

    MySQLには、NULL値も安全に比較できる特殊な等価演算子 <=>(NULL安全等価演算子)が用意されています。この記事では、<=> 演算子の動作と、通常の = 演算子との違いを具体例とともに解説します。 ケース1:通常の値の比較(= 演算子と同じ動作) <=> 演算子は、NULL以外の値同士を比較する場合、= 演算子とまったく同じように動作します。つまり、両辺の値が等しければ「1(TRUE)」、等しくなければ「0(FALSE)」を返します。 たとえば、次のような比較では、どちらの演算子でも結果は同じになります。 mysql> SELECT 10

  2. MySQLでCHAR()関数の逆の処理を行う方法|ASCII()とORD()の違いを解説

    MySQLにおいて、CHAR()関数の逆の働きをするのは ASCII() 関数と ORD() 関数です。CHAR() は数値(文字コード)を文字に変換する関数ですが、ASCII() は引数の文字列の左端の文字に対応する数値(ASCIIコード)を返し、ORD() は左端の文字の文字コードを返します。 ASCII()とORD()の違い どちらも文字から数値への変換を行う点は共通していますが、以下のような違いがあります。 ASCII():シングルバイト文字専用。マルチバイト文字を渡すと警告が出て64を返します。 ORD():マルチバイト文字にも対応しており、最初のバイトの値に基づいて計算された文字