CONCAT関数とGROUP_CONCAT関数でマスターするMySQL列結合術
MySQLで2つの列を1つの列に結合する方法
CONCAT関数は、複数の文字列を結合する関数です。2つの列を1つの列に結合するには、以下のように使用します。
SELECT CONCAT(column1, column2) AS new_column
FROM your_table;
このクエリは、your_table
テーブルの column1
列と column2
列の値を結合した新しい列 new_column
を作成し、結果を返します。
例:
顧客テーブル (customers) に、氏名 (first_name) と姓 (last_name) を格納する 2 つの列があるとします。以下のクエリは、氏名と姓を結合した新しい列 full_name
を作成し、結果を返します。
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM customers;
GROUP_CONCAT関数は、グループ内のすべての値を結合する関数です。複数の行にまたがる列を1つの列に結合する場合に使用します。
SELECT column1, GROUP_CONCAT(column2) AS new_column
FROM your_table
GROUP BY column1;
商品テーブル (products) に、商品ID (product_id) とカテゴリ (category) を格納する 2 つの列があるとします。以下のクエリは、商品IDとカテゴリを結合した新しい列 product_info
を作成し、商品IDごとにグループ化して結果を返します。
SELECT product_id, GROUP_CONCAT(category) AS product_info
FROM products
GROUP BY product_id;
補足:
- 上記の例では、区切り文字としてスペース (" ") を使用していますが、任意の文字列に変更できます。
- CONCAT関数とGROUP_CONCAT関数の両方とも、NULL値を処理することができます。NULL値を結合した場合は、結果としてNULL値になります。
- より複雑な結合が必要な場合は、JOIN操作を使用することもできます。
CONCAT関数を使用する
-- 顧客テーブル (customers) を作成
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL
);
-- データを挿入
INSERT INTO customers (first_name, last_name)
VALUES
('John', 'Doe'),
('Jane', 'Doe'),
('Peter', 'Jones'),
('Mary', 'Smith');
-- 氏名と姓を結合した新しい列を作成
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM customers;
このコードは、以下の結果を出力します。
full_name
---------
John Doe
Jane Doe
Peter Jones
Mary Smith
GROUP_CONCAT関数を使用する
-- 商品テーブル (products) を作成
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(255) NOT NULL,
category VARCHAR(255) NOT NULL
);
-- データを挿入
INSERT INTO products (product_name, category)
VALUES
('Laptop', 'Electronics'),
('Phone', 'Electronics'),
('Book', 'Books'),
('Shirt', 'Clothing'),
('Shoes', 'Clothing');
-- 商品IDとカテゴリを結合した新しい列を作成
SELECT product_id, GROUP_CONCAT(category) AS product_info
FROM products
GROUP BY product_id;
product_id | product_info
-----------+--------------
1 | Electronics
2 | Electronics
3 | Books
4 | Clothing
5 | Clothing
このサンプルコードは、基本的な使用方法を示しています。実際の使用例では、テーブルや列名、データ型などは状況に合わせて変更する必要があります。
上記のサンプルコード以外にも、状況に応じて様々な方法で2つの列を結合することができます。詳細については、MySQLのドキュメントを参照してください。
MySQLで2つの列を1つの列に結合するその他の方法
FORMAT関数は、値を指定された形式で書式設定するために使用できます。2つの列の値を結合して書式設定するには、以下のように使用します。
SELECT FORMAT(column1, '%s %s', column2) AS new_column
FROM your_table;
このクエリは、your_table
テーブルの column1
列と column2
列の値を結合し、%s %s
形式で書式設定した結果を new_column
列に格納して返します。%s
は文字列を表すプレースホルダです。
SELECT FORMAT(last_name, '%s, %s', first_name) AS full_name
FROM customers;
SUBSTRING_INDEX関数とREVERSE関数は、文字列を操作するために使用できます。2つの列の値を結合するには、以下のように使用します。
SELECT CONCAT(REVERSE(SUBSTRING_INDEX(REVERSE(column1), ',', 1)), ',', column2) AS new_column
FROM your_table;
このクエリは、your_table
テーブルの column1
列と column2
列の値を結合します。まず、REVERSE関数を使用して column1
列の値を反転させます。次に、SUBSTRING_INDEX関数を使用して、最後のカンマ (,) を含む最初の部分文字列を抽出します。さらに、REVERSE関数を使用して抽出された部分文字列を反転させ、カンマ (,) と column2
列の値を連結して、new_column
列に格納して返します。
SELECT CONCAT(REVERSE(SUBSTRING_INDEX(REVERSE(first_name), ',', 1)), ',', last_name) AS full_name
FROM customers;
CASE式を使用する
CASE式は、条件に応じて異なる値を返すために使用できます。2つの列の値を結合するには、以下のように使用します。
SELECT
CASE
WHEN column1 IS NOT NULL AND column2 IS NOT NULL THEN CONCAT(column1, ' ', column2)
WHEN column1 IS NOT NULL THEN column1
ELSE column2
END AS new_column
FROM your_table;
このクエリは、your_table
テーブルの column1
列と column2
列の値を条件に応じて結合します。column1
列と column2
列の両方に値が存在する場合は、それらをスペースで区切って結合します。一方の列のみ値が存在する場合は、その値のみを返します。
- 氏名と姓の両方に値が存在する場合は、"姓 名" 形式で結合
- 氏名のみ存在する場合は、氏名をそのまま返す
SELECT
CASE
WHEN first_name IS NOT NULL AND last_name IS NOT NULL THEN CONCAT(last_name, ' ', first_name)
WHEN first_name IS NOT NULL THEN first_name
ELSE last_name
END AS full_name
FROM customers;
注意事項
上記で紹介した方法は、それぞれ異なる用途に適しています。状況に合わせて適切な方法を選択してください
mysql sql