MySQLのINSERT INTO SELECTで別テーブルから複数行を一括挿入する方法
MySQLのINSERT INTO SELECTとは
MySQLでは、INSERT INTO ... SELECT構文を使うことで、既存テーブルのデータを別のテーブルへ一度に挿入できます。さらにGROUP_CONCAT関数と組み合わせれば、複数の行を1つの行にまとめて挿入することも可能です。本記事では、実際のSQL例を使って手順を詳しく解説します。
ステップ1:元となるテーブルを作成する
まず、データのコピー元になるテーブルを作成します。
mysql> create table DemoTable(Name varchar(100)); Query OK, 0 rows affected (0.55 sec)
次に、INSERT文を使ってサンプルデータを登録します。
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Bob');
Query OK, 1 row affected (0.20 sec)ステップ2:登録したデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+--------+ | Name | +--------+ | Chris | | Robert | | Adam | | Bob | +--------+ 4 rows in set (0.00 sec)
ステップ3:挿入先のテーブルを作成する
続いて、データの挿入先となる2つ目のテーブルを作成します。
mysql> create table DemoTable2(ListOfEmployee text); Query OK, 0 rows affected (0.59 sec)
ステップ4:INSERT INTO SELECTで複数行を一括挿入する
ここがポイントです。GROUP_CONCAT関数を使ってDemoTableのすべての名前を連結し、その結果をDemoTable2に挿入します。
mysql> insert into DemoTable2(ListOfEmployee) select group_concat(Name) from DemoTable; Query OK, 1 row affected (0.20 sec) Records: 1 Duplicates: 0 Warnings: 0
このように、INSERT INTO SELECT構文により、元テーブルの複数行データをまとめて新しいテーブルへ挿入できました。
ステップ5:結果を確認する
最後に、挿入後のテーブル内容を確認します。
mysql> select *from DemoTable2;
実行結果は以下の通りです。
+-----------------------+ | ListOfEmployee | +-----------------------+ | Chris,Robert,Adam,Bob | +-----------------------+ 1 row in set (0.00 sec)
まとめ
MySQLのINSERT INTO SELECTを使えば、別テーブルのデータを簡単に一括挿入できます。GROUP_CONCAT関数と組み合わせることで、複数行の値をカンマ区切りの1行として集約して格納することも可能です。データ移行やレポート用テーブルの作成など、さまざまな場面で活用できる便利なテクニックなので、ぜひ覚えておきましょう。
-
MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法
あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82 -> (
-
MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)
MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi