MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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句を付けなければ、元テーブルの全レコードを一括でコピーできる。
  1. MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法

    あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82     -> (     

  2. MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)

    MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi