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

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 を組み合わせれば、特定の条件に一致するレコードだけを抽出して挿入することも可能です。用途に応じて使い分けてみてください。

  1. MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法

    MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable     -> (     -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,    &

  2. MySQLで複数のレコードをすばやく一括挿入するクエリの書き方

    MySQLで複数のレコードを効率よく挿入したい場合、INSERT文を何度も実行するのではなく、1つのINSERT文で複数行をまとめて指定するのがおすすめです。この方法ならデータベースとの通信回数が減り、処理速度が大幅に向上します。 基本構文 複数のレコードをすばやく挿入するには、単一のINSERT文を使い、以下の構文に従います。 insert into yourTableName values(yourValue1,yourValue2,...N),(yourValue1,yourValue2,...N).....N; ポイントは、各行の値セットをカンマ(,)で区切って並べるだけというシンプル