Developer

【SQL基礎】INSERT文で複数行を同時に挿入する
2020.11.30
Lv1

【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を組み合わせて、他のテーブルからデータを挿入できる。

 

練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.zip

[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カラムで構成されています。

答え
[sql] INSERT INTO countries (id, name, group_name) VALUES
(100, ‘ブラジルA’, ‘X’),
(101, ‘ブラジルB’, ‘X’),
(102, ‘ブラジルC’, ‘X’),
(103, ‘ブラジルD’, ‘X’);
[/sql]

rankingに関しては指定がないので、カラム名を指定する必要はありません。

指定されていないカラムにはNULLが入ります。(下図参照)

(中略)

2.test1テーブルのレコードをtest2テーブルへ挿入するために、以下のようなSQLを実行したらうまくいきませんでした。

どこをどのように書き換えたらよいでしょうか。

INSERT INTO test2 (col1, col2, col3)
VALUES col1, col2, col3
FROM test1;
答え

VALUESをSELECTに書き換える。

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ