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

MySQLで2つの列を1つの列に結合する方法|COALESCE関数の使い方を解説

MySQLでは、COALESCE()関数を使うことで、2つの列の値を1つの列に結合できます。COALESCE()関数は、引数として渡された列の中から最初のNULL以外(NON NULL)の値を返す関数です。

この記事では、実際にデモテーブルを作成しながら、COALESCE()関数の動作をわかりやすく解説します。

デモテーブルの作成

まず、理解を深めるためにサンプル用のテーブルを作成しましょう。

mysql> create table combineTwoColumnsDemo
    -> (
    -> UserId int,
    -> UserName varchar(20),
    -> UserAge int
    -> );
Query OK, 0 rows affected (1.12 sec)

テーブルへのデータ挿入

次に、INSERTコマンドを使ってテーブルにレコードを挿入します。あとでNULL値の挙動を確認できるよう、意図的にNULLを含むデータも登録しておきます。

mysql> insert into combineTwoColumnsDemo values(101,'John',23);
Query OK, 1 row affected (0.16 sec)
mysql> insert into combineTwoColumnsDemo values(102,'Carol',20);
Query OK, 1 row affected (0.14 sec)
mysql> insert into combineTwoColumnsDemo values(103,'Bob',25);
Query OK, 1 row affected (0.13 sec)
mysql> insert into combineTwoColumnsDemo values(104,'Mike',26);
Query OK, 1 row affected (0.18 sec)
mysql> insert into combineTwoColumnsDemo values(105,NULL,23);
Query OK, 1 row affected (0.22 sec)
mysql> insert into combineTwoColumnsDemo values(105,'Maxwell',NULL);
Query OK, 1 row affected (0.15 sec)

登録済みレコードの確認

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from combineTwoColumnsDemo;

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

+--------+----------+---------+
| UserId | UserName | UserAge |
+--------+----------+---------+
|     101 | John      |       23 |
|     102 | Carol     |       20 |
|     103 | Bob        |       25 |
|     104 | Mike      |       26 |
|     105 | NULL      |       23 |
|     105 | Maxwell |     NULL |
+--------+----------+---------+
6 rows in set (0.00 sec)

ここで注目したいのは、5行目のUserNameがNULL、6行目のUserAgeがNULLになっている点です。

COALESCE()関数で2つの列を結合する

それでは、2つの列(UserNameとUserAge)を1つの列に結合するクエリを見ていきましょう。

mysql> SELECT UserName,
    -> UserAge,
    -> COALESCE(UserName, UserAge) AS Combine_UserName_UserAge
    -> FROM combineTwoColumnsDemo;

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

+----------+---------+--------------------------+
| UserName | UserAge | Combine_UserName_UserAge |
+----------+---------+--------------------------+
| John      |       23 | John                          |
| Carol     |       20 | Carol                        |
| Bob        |       25 | Bob                           |
| Mike      |       26 | Mike                         |
| NULL      |       23 | 23                             |
| Maxwell |     NULL | Maxwell                   |
+----------+---------+--------------------------+
6 rows in set (0.00 sec)

実行結果のポイント

結合結果の列「Combine_UserName_UserAge」に注目してください。

  • UserNameに値がある場合(John、Carolなど)→ UserNameの値がそのまま返される
  • UserNameがNULLの場合(5行目)→ UserAgeの値「23」が代わりに返される
  • UserAgeがNULLの場合(6行目)→ UserNameの値「Maxwell」が返される

このように、COALESCE()関数は左から順に引数を評価し、最初に見つかったNULL以外の値を返します。NULL値が混在するデータを扱う際に、代替値を自動的に補完できるため、非常に便利な関数です。

  1. MySQLでNULLを含む列同士を連結する方法:IFNULL()を使った安全な文字列結合

    MySQLでNULL値を含む列を連結するには? MySQLで複数の列を連結する際、対象の列にNULLが含まれていると、CONCAT()関数の結果全体がNULLになってしまうという問題があります。これを回避するためには、IFNULL()関数を活用するのが効果的です。 この記事では、実際にテーブルを作成し、NULLを含むデータを連結する手順を具体的な例とともに解説します。 1. サンプルテーブルを作成する まず、学生の名前(姓・名)を格納するテーブルを作成しましょう。 mysql> create table DemoTable1793 ( StudentFirstName

  2. MySQLの1つのUPDATE文で2つの列を同時に更新する方法

    はじめにMySQLでは、1つのUPDATE文の中でSET句を一度だけ使えば、複数の列を同時に更新できます。各列の指定はカンマ(,)で区切って記述します。この記事では、実際にテーブルを作成し、1つのクエリで2つの列(FirstNameとLastName)を更新する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1909 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20)