MySQLのINSERT INTO SELECT文で複数のテーブルからレコードを挿入する方法
複数のテーブルからレコードを挿入するには、INSERT INTO ... SELECT 文を使用します。この記事では、2つのテーブルのデータを組み合わせて、別のテーブルへレコードを挿入する手順を、実際の実行例とともに解説します。
1つ目のテーブルを作成する
まず、挿入元となる1つ目のテーブルを作成しましょう。
mysql> create table DemoTable1943
(
Name varchar(20)
);
Query OK, 0 rows affected (0.00 sec)
サンプルデータを挿入する
INSERTコマンドを使って、テーブルにレコードを追加します。
mysql> insert into DemoTable1943 values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1943 values('Robert');
Query OK, 1 row affected (0.00 sec)
レコードを確認する
SELECT文でテーブル内のすべてのレコードを表示します。
mysql> select * from DemoTable1943;
実行結果は以下の通りです。
+--------+ | Name | +--------+ | Chris | | Robert | +--------+ 2 rows in set (0.00 sec)
2つ目のテーブルを作成する
続いて、2つ目のテーブルを作成します。
mysql> create table DemoTable1944
(
Age int
);
Query OK, 0 rows affected (0.00 sec)
サンプルデータを挿入する
mysql> insert into DemoTable1944 values(23); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1944 values(26); Query OK, 1 row affected (0.00 sec)
レコードを確認する
mysql> select * from DemoTable1944;
実行結果は以下の通りです。
+------+ | Age | +------+ | 23 | | 26 | +------+ 2 rows in set (0.00 sec)
3つ目のテーブル(挿入先)を作成する
最後に、挿入先となる3つ目のテーブルを作成します。氏名を格納する StudentName と、年齢を格納する StudentAge の2つのカラムを持たせます。
mysql> create table DemoTable1945
(
StudentName varchar(20),
StudentAge int
);
Query OK, 0 rows affected (0.00 sec)
複数のテーブルからレコードを挿入する
ここが本題です。INSERT INTO ... SELECT 文を使えば、SELECT句で複数のテーブルを参照し、その結果をそのまま別テーブルへ挿入できます。
mysql> insert into DemoTable1945(StudentName,StudentAge) select tbl1.Name,tbl2.Age from DemoTable1943 tbl1,DemoTable1944 tbl2; Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0
DemoTable1943には2件、DemoTable1944には2件のレコードが登録されています。結合条件を指定しない場合はクロス結合(直積)になるため、すべての組み合わせである 2×2=4件 のレコードが挿入されます。
挿入結果を確認する
mysql> select * from DemoTable1945;
実行結果は以下の通りです。
+-------------+------------+ | StudentName | StudentAge | +-------------+------------+ | Chris | 23 | | Robert | 23 | | Chris | 26 | | Robert | 26 | +-------------+------------+ 4 rows in set (0.00 sec)
このように、INSERT INTO ... SELECT 文を利用すれば、複数のテーブルのデータを1つのSQL文でまとめて挿入できます。さらに WHERE 句や JOIN を組み合わせれば、特定の条件に一致するレコードだけを抽出して挿入することも可能です。用途に応じて使い分けてみてください。
-
MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法
MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &
-
MySQLで複数のレコードをすばやく一括挿入するクエリの書き方
MySQLで複数のレコードを効率よく挿入したい場合、INSERT文を何度も実行するのではなく、1つのINSERT文で複数行をまとめて指定するのがおすすめです。この方法ならデータベースとの通信回数が減り、処理速度が大幅に向上します。 基本構文 複数のレコードをすばやく挿入するには、単一のINSERT文を使い、以下の構文に従います。 insert into yourTableName values(yourValue1,yourValue2,...N),(yourValue1,yourValue2,...N).....N; ポイントは、各行の値セットをカンマ(,)で区切って並べるだけというシンプル