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

MySQLでNULLを0に変換する方法|IFNULL関数の使い方を解説

MySQLでNULLを0に変換する方法

MySQLでは、IFNULL()関数を使うことで、NULL値を0(または任意のデフォルト値)に置き換えて取得できます。集計処理やアプリケーション側でのNULLチェックを省きたい場合に非常に便利な機能です。

IFNULL()関数の基本構文

SELECT IFNULL(カラム名, 0) AS 別名 FROM テーブル名;

IFNULL()は、第1引数の値がNULLでなければその値をそのまま返し、NULLであった場合には第2引数で指定した値を返します。


サンプルテーブルの作成

まず、動作を確認するためのテーブルを作成しましょう。

mysql> CREATE TABLE TypecastDemo
    -> (
    ->   AccountNumber INT
    -> );
Query OK, 0 rows affected (0.84 sec)

NULLを含むレコードの挿入

次に、NULL値を含む複数のレコードを挿入します。

mysql> INSERT INTO TypecastDemo VALUES(NULL);
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO TypecastDemo VALUES(1234);
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO TypecastDemo VALUES(9876);
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO TypecastDemo VALUES(6666);
Query OK, 1 row affected (0.16 sec)

mysql> INSERT INTO TypecastDemo VALUES(NULL);
Query OK, 1 row affected (0.27 sec)

mysql> INSERT INTO TypecastDemo VALUES(NULL);
Query OK, 1 row affected (0.36 sec)

mysql> INSERT INTO TypecastDemo VALUES(3214);
Query OK, 1 row affected (0.34 sec)

挿入したレコードの確認

SELECT文ですべてのレコードを表示してみます。

mysql> SELECT * FROM TypecastDemo;

実行結果は以下のとおりです。

+---------------+
| AccountNumber |
+---------------+
|          NULL |
|          1234 |
|          9876 |
|          6666 |
|          NULL |
|          NULL |
|          3214 |
+---------------+
7 rows in set (0.00 sec)

このように、AccountNumberカラムにはNULLが3件含まれていることがわかります。


IFNULL()でNULLを0に変換する

それでは、先ほど紹介した構文を使って、NULLを0に変換して取得してみましょう。

mysql> SELECT IFNULL(AccountNumber, 0) AS TypeCastNullToZero FROM TypecastDemo;

実行結果は以下のとおりです。

+--------------------+
| TypeCastNullToZero |
+--------------------+
|                  0 |
|                1234 |
|                9876 |
|                6666 |
|                  0 |
|                  0 |
|                3214 |
+--------------------+
7 rows in set (0.00 sec)

NULLだった行がすべて「0」に置き換えられて表示されました。なお、IFNULL()による変換はあくまで取得時の表示を変えるだけであり、元のテーブルのデータが書き換えられるわけではないので安心して利用できます。


複数カラムを扱う場合はCOALESCE()も便利

複数のカラムの中から、最初に見つかった非NULLの値を取得したい場合は、COALESCE()関数が便利です。IFNULL()が引数を2つしか取れないのに対し、COALESCE()は任意の数の引数を指定できます。

SELECT COALESCE(カラムA, カラムB, カラムC, 0) AS 結果 FROM テーブル名;

この例では、カラムAがNULLならカラムB、それもNULLならカラムCという順に評価され、すべてNULLだった場合のみ0が返されます。


まとめ

  • NULLを0に変換して取得するには IFNULL(カラム名, 0) を使う
  • IFNULL()は引数を2つ取り、第1引数がNULLの場合に第2引数の値を返す
  • 3つ以上のカラムや値を優先順位付きで評価したい場合は COALESCE() が便利
  1. MySQLでNULL値を1として表示・更新する方法

    MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを

  2. MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法

    MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl