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

MySQLでNULLを0に変換する方法|IFNULLとCOALESCEの使い方を実例で解説

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

MySQLでは、テーブル内のNULL値をそのまま表示すると、集計やアプリケーション側の処理で扱いにくいケースがあります。そんなときは、IFNULL()関数またはCOALESCE()関数を使えば、NULLを簡単に0へ変換できます。

基本構文

IFNULL関数を使う場合の構文は以下のとおりです。第1引数がNULLの場合に、第2引数(ここでは0)が返されます。

SELECT IFNULL(yourColumnName, 0) AS anyAliasName FROM yourTableName;

COALESCE関数を使う場合の構文は次のとおりです。

SELECT COALESCE(yourColumnName, 0) AS anyAliasName FROM yourTableName;

補足: COALESCE関数は2つ以上の引数を受け取ることができ、「最初に現れたNULL以外の値」を返すという特徴があります。単純なNULL→0の置換であれば、どちらの関数でも同じ結果が得られます。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。テーブル作成クエリは次のとおりです。

mysql> create table convertNullToZeroDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name varchar(20),
    -> Salary int
    -> );
Query OK, 0 rows affected (1.28 sec)

テストデータの挿入

INSERTコマンドを使って、SalaryカラムにNULLを含むレコードを挿入します。

mysql> insert into convertNullToZeroDemo(Name, Salary) values('John', NULL);
Query OK, 1 row affected (0.20 sec)
mysql> insert into convertNullToZeroDemo(Name, Salary) values('Carol', 5610);
Query OK, 1 row affected (0.10 sec)
mysql> insert into convertNullToZeroDemo(Name, Salary) values('Bob', NULL);
Query OK, 1 row affected (0.15 sec)
mysql> insert into convertNullToZeroDemo(Name, Salary) values('David', NULL);
Query OK, 1 row affected (0.12 sec)

現在のデータを確認する

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

mysql> select * from convertNullToZeroDemo;

出力結果は以下のとおりです。SalaryカラムにNULLが含まれていることがわかります。

+----+-------+--------+
| Id | Name  | Salary |
+----+-------+--------+
| 1  | John  | NULL   |
| 2  | Carol | 5610   |
| 3  | Bob   | NULL   |
| 4  | David | NULL   |
+----+-------+--------+
4 rows in set (0.05 sec)

方法1:IFNULL関数でNULLを0に変換する

IFNULL関数を使って、NULLを0に置き換えて取得するクエリです。

mysql> select IFNULL(Salary, 0) as `CONVERT_NULL_TO_0` from convertNullToZeroDemo;

実行結果:

+--------------------+
| CONVERT_NULL_TO_0  |
+--------------------+
| 0                  |
| 5610               |
| 0                  |
| 0                  |
+--------------------+
4 rows in set (0.05 sec)

NULLだったレコード(John、Bob、David)がすべて「0」として表示されました。

方法2:COALESCE関数でNULLを0に変換する

続いて、COALESCE関数を使った場合のクエリです。

mysql> select coalesce(Salary, 0) as `CONVERT_NULL_TO_0` from convertNullToZeroDemo;

実行結果:

+--------------------+
| CONVERT_NULL_TO_0  |
+--------------------+
| 0                  |
| 5610               |
| 0                  |
| 0                  |
+--------------------+
4 rows in set (0.00 sec)

こちらもIFNULL関数と同様に、NULLがすべて0に変換されて出力されています。

まとめ

MySQLでNULLを0に変換したい場合は、IFNULL(カラム名, 0) または COALESCE(カラム名, 0) を使います。どちらも結果は同じですが、複数の候補値の中から最初の非NULL値を取りたい場合にはCOALESCEが便利です。レポートや集計処理でNULLを避けたい場面で、ぜひ活用してください。

  1. 【MySQL】空の値(空文字列)をNULLに変換するUPDATEクエリの書き方

    MySQLでは、UPDATE文のSET句とWHERE句を組み合わせるだけで、カラムに入っている空の値(空文字列)をNULLへ簡単に変換できます。ここからは、実際のサンプルを使って手順を詳しく解説していきます。 1. サンプルテーブルを作成する まず、以下のコマンドでテーブルを作成しましょう。 mysql> create table DemoTable1315 -> ( -> CountryName varchar(10) -> ); Query OK, 0 rows affected (0.60 sec) 2. レコードを挿入する 次に、INSERTコマンドでレコー

  2. MySQLで時間をHH:MM:SSからHH:MM形式に変換する方法

    MySQLのTIME_FORMAT()関数で時間形式を変換するMySQLでTIME型の時間を「HH:MM:SS」から「HH:MM」形式に変換するには、TIME_FORMAT()関数を使用します。この関数を使うと、秒を取り除いた見やすい時間表示を簡単に実現できます。ここでは、実際の手順をサンプルコードとともに解説します。1. サンプルテーブルの作成まず、TIME型のカラムを持つテーブルを作成します。mysql> create table DemoTable1419-> (-> ArrivalTime time-> );Query OK, 0 rows affected (