【SQL基礎】INSERT文で複数行を同時に挿入する
INSERT文で複数行を同時に挿入する
前回の記事では、データを挿入するためのSQLであるINSERT文を扱いました。
ただ、データを一件ずつ挿入していくのは手間がかかります。
そこで今回は、INSERT文を使って複数のデータを同時に挿入する方法を扱います。
書式は以下の通りです。
INSERT INTO テーブル名 (カラム名1, カラム名2, ……) VALUES
(レコード1),
(レコード2),
(レコード……);
今回も前回同様、以下のテーブル(テーブル名:teachers)にデータを挿入します。
例1.3件分のレコードをまとめて挿入する。
INSERT INTO teachers (id, name, address, age) VALUES (4, ‘テツヒコ’, ‘東京都’, 30), (5, ‘ヒロシ’, ‘神奈川県’, 25), (6, ‘ユウタ’, ‘千葉県’, 27);
テーブル内のすべてのカラムを指定する場合には、カラム名は省略可能です。
したがって、例1で以下のように書いても結果は同じです。
INSERT INTO teachers VALUES (4, ‘テツヒコ’, ‘東京都’, 30), (5, ‘ヒロシ’, ‘神奈川県’, 25), (6, ‘ユウタ’, ‘千葉県’, 27);
他のテーブルからデータを挿入する
INSERTとSELECTを組み合わせることで、他のテーブルからデータをまとめて挿入することができます。
書式は以下の通りです。
INSERT INTO テーブル名A (カラム名A1, カラム名A2, ……)
SELECT カラム名B1, カラム名B2, ……
FROM テーブル名B;
テーブル名Aにはデータを挿入したいテーブル名を指定し、テーブル名Bには参照するテーブル名を指定します。
SELECT句で選択するカラムに対して演算を用いることもできます。
例2.空のteachers_next_yearテーブル(teachersと同じテーブル定義)にteachersテーブルのデータをまとめて挿入する。その際、ageカラムに+1をする。
INSERT INTO teachers_next_year (id, name, address, age) SELECT id, name, address, age + 1 FROM teachers;
teachers_next_yearテーブルにteachersテーブルのデータがまとめて挿入され、ageカラムに関しては+1されていることが確認できました。
今回の学習のポイント
・INSERT文を用いて複数のデータを同時に挿入することができる。
・INSERTとSELECTを組み合わせて、他のテーブルからデータを挿入できる。
練習問題
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。 [sql] CREATE DATABASE worldcup2014;
use worldcup2014
source C:\worldcup2014.sql
[/sql]
1.主催国特権を発動して、ブラジルが自国の4チームをグループXとして追加したようです。
ID100~103を割り当てたブラジルA、ブラジルB、ブラジルC、ブラジルDの4チームをcountriesテーブルにまとめて追加してください。
※countriesテーブルは、id, name, ranking, group_nameの4カラムで構成されています。
2.test1テーブルのレコードをtest2テーブルへ挿入するために、以下のようなSQLを実行したらうまくいきませんでした。
どこをどのように書き換えたらよいでしょうか。
INSERT INTO test2 (col1, col2, col3) VALUES col1, col2, col3 FROM test1;