MySQLのSELECT文でカラム(フィールド)を連結する方法|CONCAT関数の使い方を解説
MySQLのSELECT文でカラムを連結するには?
MySQLのSELECT文でカラム(フィールド)の値や文字列を連結したい場合は、CONCAT()関数を使用します。CONCAT関数は、引数として渡された文字列やカラムの値を順番に連結し、1つの文字列として返す便利な関数です。
基本構文
SELECT文でカラムを連結する際の基本的な構文は以下のとおりです。
SELECT CONCAT(カラム名1, '任意の連結文字列'), CONCAT(カラム名2, '任意の連結文字列'), ...N FROM テーブル名;
サンプルテーブルを作成する
それでは、実際に動作を確認するためにテーブルを作成しましょう。テーブル作成のクエリは以下のとおりです。
mysql> create table selectConcat -> ( -> StudentId int, -> StudentName varchar(100), -> StudentAge int -> ); Query OK, 0 rows affected (1.32 sec)
レコードを挿入する
INSERTコマンドを使って、作成したテーブルにいくつかのレコードを追加します。
mysql> insert into selectConcat values(1,'Carol',23); Query OK, 1 row affected (0.19 sec) mysql> insert into selectConcat values(2,'John',24); Query OK, 1 row affected (0.25 sec) mysql> insert into selectConcat values(3,'Adam',25); Query OK, 1 row affected (0.14 sec) mysql> insert into selectConcat values(4,'Bob',21); Query OK, 1 row affected (0.20 sec) mysql> insert into selectConcat values(5,'Sam',22); Query OK, 1 row affected (0.16 sec)
登録したデータを確認する
SELECT文ですべてのレコードを表示して、正しく登録されているか確認します。
mysql> select *from selectConcat;
実行結果は以下のとおりです。
+-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Carol | 23 | | 2 | John | 24 | | 3 | Adam | 25 | | 4 | Bob | 21 | | 5 | Sam | 22 | +-----------+-------------+------------+ 5 rows in set (0.00 sec)
SELECT文でカラムを連結する
準備ができたので、CONCAT関数を使ってSELECT文内でカラムを連結してみましょう。ここでは、StudentIdに「' as an Id'」という文字列を、StudentNameに「' as a Name'」という文字列をそれぞれ連結しています。
mysql> select concat(StudentId,' as an Id'),concat(StudentName,' as a Name') from selectConcat;
実行結果は以下のとおりです。各カラムの値に指定した文字列が連結されて表示されていることがわかります。
+-------------------------------+----------------------------------+ | concat(StudentId,' as an Id') | concat(StudentName,' as a Name') | +-------------------------------+----------------------------------+ | 1 as an Id | Carol as a Name | | 2 as an Id | John as a Name | | 3 as an Id | Adam as a Name | | 4 as an Id | Bob as a Name | | 5 as an Id | Sam as a Name | +-------------------------------+----------------------------------+ 5 rows in set (0.00 sec)
応用:AS句で別名を付けて見やすくする
出力結果のヘッダーを見やすくしたい場合は、AS句を使ってカラムに別名を付けるのがおすすめです。
mysql> select concat(StudentId,' as an Id') AS IdInfo,
-> concat(StudentName,' as a Name') AS NameInfo
-> from selectConcat;注意点:NULLが含まれる場合
CONCAT関数は、引数のうち1つでもNULLが含まれていると、結果全体がNULLになります。NULLが含まれる可能性があるカラムを扱う場合は、IFNULL()関数などと組み合わせてNULLを空文字列に置き換えると安全です。また、区切り文字を挟みながら連結したい場合は、CONCAT_WS()関数を使うとより簡潔に記述できます。
-
MySQLでIdごとに重複を除外してGROUP_CONCATするクエリの書き方
はじめにMySQLでは、テーブル内に同じIdとNameの組み合わせが重複して登録されているケースがあります。このような場合、DISTINCTで重複行を除外したうえでGROUP_CONCAT()を適用すれば、Idによって区別された一意な値だけを連結できます。本記事では、実際にテーブルを作成し、データを挿入してから、Idごとに重複を除外したGROUP_CONCATを実行するまでの手順を具体的に解説します。サンプルテーブルの作成まず、以下のCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable ( Id int, Name
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;