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値が混在するデータを扱う際に、代替値を自動的に補完できるため、非常に便利な関数です。
-
MySQLでNULLを含む列同士を連結する方法:IFNULL()を使った安全な文字列結合
MySQLでNULL値を含む列を連結するには? MySQLで複数の列を連結する際、対象の列にNULLが含まれていると、CONCAT()関数の結果全体がNULLになってしまうという問題があります。これを回避するためには、IFNULL()関数を活用するのが効果的です。 この記事では、実際にテーブルを作成し、NULLを含むデータを連結する手順を具体的な例とともに解説します。 1. サンプルテーブルを作成する まず、学生の名前(姓・名)を格納するテーブルを作成しましょう。 mysql> create table DemoTable1793 ( StudentFirstName
-
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)