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

MySQLのCOALESCE関数とは?使い方を実例付きでわかりやすく解説

MySQLのCOALESCE関数とは

MySQLにおけるCOALESCE関数は、指定した複数のカラム(または式)の中から、最初に見つかったNULL以外の値を返す関数です。すべてのカラムがNULLだった場合のみNULLを返し、それ以外の場合は先頭から順に評価して、最初のNULLでない値を結果として返します。

この関数は、データベース上のNULL値を別の候補の値で補完して表示したい場合などに非常に便利です。例えば、ユーザー情報の中から「電話番号」「メールアドレス」「住所」など複数の項目のうち、実際に値が入っているものを優先的に取得したいケースで活躍します。

COALESCEの基本構文

構文は以下の通りです。

SELECT COALESCE(カラム名1, カラム名2, カラム名3, ......N) AS 任意の別名
FROM テーブル名;

それでは、具体的な例を見ながらCOALESCEの動作を確認していきましょう。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成します。以下のクエリを実行してください。

mysql> create table CoalesceDemo
-> (
-> Id int,
-> Name varchar(100),
-> Age int,
-> Address varchar(100)
-> );
Query OK, 0 rows affected (0.57 sec)

テーブル「CoalesceDemo」には、Id・Name・Age・Address の4つのカラムを定義しています。

テストデータの挿入

次に、INSERTコマンドを使っていくつかのレコードを挿入します。あえて各レコードの多くのカラムをNULLにすることで、COALESCEの挙動が確認しやすくなっています。

mysql> insert into CoalesceDemo values(1,NULL,NULL,NULL);
Query OK, 1 row affected (0.14 sec)

mysql> insert into CoalesceDemo values(NULL,'Mike',NULL,NULL);
Query OK, 1 row affected (0.17 sec)

mysql> insert into CoalesceDemo values(NULL,NULL,23,NULL);
Query OK, 1 row affected (0.24 sec)

mysql> insert into CoalesceDemo values(NULL,NULL,NULL,'UK');
Query OK, 1 row affected (0.14 sec)

mysql> insert into CoalesceDemo values(NULL,NULL,NULL,NULL);
Query OK, 1 row affected (0.17 sec)

登録済みレコードの確認

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

mysql> select *from CoalesceDemo;

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

+------+------+------+---------+
| Id | Name | Age | Address |
+------+------+------+---------+
| 1 | NULL | NULL | NULL |
| NULL | Mike | NULL | NULL |
| NULL | NULL | 23 | NULL |
| NULL | NULL | NULL | UK |
| NULL | NULL | NULL | NULL |
+------+------+------+---------+
5 rows in set (0.00 sec)

ご覧のとおり、各行には最大で1つのカラムにだけ値が入っているか、あるいはすべてがNULLとなっています。

COALESCEで最初のNULL以外の値を取得する

準備ができましたので、COALESCE関数を使って、各行の「最初にNULLではない値」を取得してみます。

mysql> select Coalesce(Id,Name,Age,Address) as FirstNotNullValue from CoalesceDemo;

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

+-------------------+
| FirstNotNullValue |
+-------------------+
| 1 |
| Mike |
| 23 |
| UK |
| NULL |
+-------------------+
5 rows in set (0.00 sec)

実行結果の解説

出力結果から、COALESCEがどのように動作しているのかを読み取ることができます。

  • 1行目:Id = 1 のため「1」が返される
  • 2行目:IdがNULLで Name = 'Mike' のため「Mike」が返される
  • 3行目:IdとNameがNULLで Age = 23 のため「23」が返される
  • 4行目:Id・Name・AgeがNULLで Address = 'UK' のため「UK」が返される
  • 5行目:すべてのカラムがNULLのため「NULL」が返される

このように、COALESCE関数は左から右へ順に引数を評価し、最初に見つかったNULL以外の値を返すというシンプルながら強力な動作を行います。NULL値の取り扱いに悩んだ際は、ぜひ活用してみてください。

補足:IFNULL関数との違い

MySQLには、COALESCEとよく似た働きをするIFNULL関数も存在します。IFNULLは引数を2つしか受け取らず、第1引数がNULLの場合に第2引数を返すという動作です。一方、COALESCEは3つ以上の引数にも対応でき、より柔軟なNULL処理が可能です。また、COALESCEは標準SQLで定義されている関数であるため、他のデータベースへの移植性を考慮するならCOALESCEの利用が推奨されます。

  1. MySQLでORDER BY NULLは使用できる?使い方と注意点を解説

    結論から言うと、MySQLでは ORDER BY NULL を使用することが可能です。 注意点: MySQL 5.7 より前のバージョンでは、ORDER BY NULL を指定することで暗黙のソートを抑制でき、パフォーマンス向上に役立ちました。しかし、MySQL 8.0 以降では、クエリの末尾に ORDER BY NULL を記述して暗黙のソートを防ぐ必要はなくなっています。 検証用テーブルの作成 まず、動作を確認するためのテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Name varchar(10) -> );

  2. MySQLで@記号を使う方法!ユーザー定義変数の基本と実例をわかりやすく解説

    MySQLで@記号を使用するには、SETコマンドを利用します。@記号は、セッション内で有効なユーザー定義変数を設定する際に使われる記号です。変数に値を格納しておけば、後続のクエリ内でその値を何度でも再利用できるため、条件の共通化や一時的な値の保持に非常に便利です。 @記号によるユーザー定義変数の基本構文 ユーザー定義変数を設定する基本的な構文は以下のとおりです。 SET @anyVariableName := yourValue; :=は代入演算子で、右側の値を左側の変数に代入します。これにより、以降のSQL文の中で@anyVariableNameを参照できるようになります。 サンプルテーブル