MySQL で他のテーブルからデータを挿入 (INSERT ... SELECT)

前回「 MySQL でデータの挿入 (INSERT) 」では、 INSERT と VALUES を使ってテーブルにデータを挿入しました。

今回は INSERT と SELECT を使って、他のテーブルから取得した結果セットを、別のテーブルに挿入する方法をご説明します。


INSERT ... SELECT で他のテーブルからデータを挿入する

MySQL で他のテーブルから取得した結果セットを、別のテーブルに挿入するには INSERT ... SELECT 文を使います。

[テーブル2] から SELECT で取得した結果セットを [テーブル1] に挿入する INSERT ... SELECT 文の構文は次の通りです。

INSERT INTO [テーブル1] (
            [カラム1],
            [カラム2],
            [カラム3],
            ...
   )
   SELECT   [カラム1],
            [カラム2],
            [カラム3],
            ...
   FROM     [テーブル2]

カラムの数と、データ型がマッチしていれば、テーブル1 と テーブル2 のカラム名は同じでなくても大丈夫です。

挿入するデータ元の結果セットを取得する SELECT 文のほうは、WHERE 句や ORDER BY 句などがあってもかまいません。

SELECT 文の結果セットが [テーブル1] に INSERT したいカラムとマッチしさえすれば、 データの取得は同じテーブルからでも、結合したテーブルからでも、集計した結果でも OK です。


例えば、次のような students テーブルと students_temp テーブルがあります。

MySQL で INSERT と SELECT を使って他のテーブルからデータを挿入する 1

MySQL で INSERT と SELECT を使って他のテーブルからデータを挿入する 2


students_temp テーブルの女性の学生 (gender = 'F') を students テーブルに一括で挿入したい時は次のようにできます。

INSERT INTO students (
			student_number,
			first_name,
			last_name,
			birthday,
			gender,
            paid_flag
	)
	SELECT 	student_number,
			first_name,
			last_name,
			birthday,
			gender,
            paid_flag
	FROM 	students_temp
	WHERE 	gender = 'F';


上の INSERT ... SELECT 文を実行して、students テーブルの中身を確認します。

MySQL で INSERT と SELECT を使って他のテーブルからデータを挿入する 3

students テーブルに students_temp テーブルの女性の学生のレコードが挿入されていますね。


以上、MySQL で INSERT ... SELECT 文を使って、他のテーブルから取得した結果セットを、別のテーブルに挿入する方法をご説明しました。

© 2024 MySQL 入門