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 テーブルがあります。
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 テーブルの中身を確認します。
students テーブルに students_temp テーブルの女性の学生のレコードが挿入されていますね。
以上、MySQL で INSERT ... SELECT 文を使って、他のテーブルから取得した結果セットを、別のテーブルに挿入する方法をご説明しました。