MySQLでSELECT文の結果を使って別テーブルへ値を挿入する方法(INSERT INTO SELECT)
あるテーブルからデータを抽出しながら、別のテーブルに値を挿入したい場合は、INSERT INTO ... SELECT文を使用します。この構文を使えば、SELECT文の実行結果をそのまま別のテーブルに流し込むことができます。WHERE句と組み合わせれば、条件に合致するレコードだけをコピーすることも可能です。
ここでは、実際にテーブルを2つ作成し、片方のテーブルからもう片方へデータをコピーする手順を順番に見ていきましょう。
手順1:元となるテーブルを作成する
まず、コピー元になるテーブル「DemoTable1」を作成します。
mysql> create table DemoTable1
-> (
-> Id int,
-> Name varchar(20),
-> Age int
-> );
Query OK, 0 rows affected (1.72 sec)
手順2:レコードを挿入する
続いて、INSERTコマンドでいくつかのレコードを追加します。
mysql> insert into DemoTable1 values(100,'Chris',24);
Query OK, 1 row affected (0.61 sec)
mysql> insert into DemoTable1 values(101,'Adam',23);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1 values(102,'John',25);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1 values(103,'Carol',26);
Query OK, 1 row affected (0.26 sec)
手順3:テーブルの中身を確認する
SELECT文ですべてのレコードを表示して、正しく登録されているか確認しましょう。
mysql> select * from DemoTable1;
実行すると、次のような出力が得られます。
+------+-------+------+
| Id | Name | Age |
+------+-------+------+
| 100 | Chris | 24 |
| 101 | Adam | 23 |
| 102 | John | 25 |
| 103 | Carol | 26 |
+------+-------+------+
4 rows in set (0.00 sec)
手順4:挿入先のテーブルを作成する
次に、データのコピー先となる2つ目のテーブル「DemoTable2」を作成します。列名は異なっていても構いませんが、対応する列のデータ型には注意してください。
mysql> create table DemoTable2
-> (
-> EmployeeId int,
-> EmployeeFirstName varchar(20),
-> EmployeeAge int
-> );
Query OK, 0 rows affected (1.63 sec)
手順5:INSERT INTO SELECTで値を挿入する
いよいよ本題です。DemoTable1からSELECTした結果を、DemoTable2へ挿入します。ここではWHERE句を使って、「Id=101」のレコードのみをコピーしています。
mysql> insert into DemoTable2(EmployeeId,EmployeeFirstName,EmployeeAge) select Id,Name,Age from DemoTable1 where Id=101;
Query OK, 1 row affected (0.17 sec)
Records: 1 Duplicates: 0 Warnings: 0
挿入結果を確認する
DemoTable2の内容をSELECT文で確認しましょう。
mysql> select * from DemoTable2;
実行結果は以下の通りです。指定した条件に一致するレコードだけが、正しく挿入されていることがわかります。
+------------+-------------------+-------------+
| EmployeeId | EmployeeFirstName | EmployeeAge |
+------------+-------------------+-------------+
| 101 | Adam | 23 |
+------------+-------------------+-------------+
1 row in set (0.00 sec)
ポイントまとめ
- INSERT INTO 先テーブル(列名...) SELECT 列名... FROM 元テーブル の形式で記述する。
- SELECT側で指定する列の数と順序は、INSERT側で指定した列と対応している必要がある。
- WHERE句を付けなければ、元テーブルの全レコードを一括でコピーできる。
-
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