他のテーブルから取得したデータを追加

値を指定してデータを追加するかわりに、他のテーブルに含まれているデータを取得して追加することできます。次の書式を使います。

INSERT INTO テーブル名 SQL文;

SQL文で取得して他のテーブルのデータを追加します。この場合、追加するテーブルのカラムの数と、SQL文で取得するデータのカラムの数は一致していなければいけません。(カラム名は一致している必要はありません)。

またテーブルのカラムを指定して追加することもできます。次の書式を使います。

INSERT INTO テーブル名(カラム名1, カラム名2, ...) SQL文;

この場合、指定したカラムの数と、SQL文で取得するデータのカラムの数は一致していなければいけません。追加されるテーブルの指定されなかったカラムには、DEFAULT制約が設定されていればデフォルト値が格納され、そうでなければNULLが格納されます。

具体的には次のようになります。

create table customer(id integer, name text, address text);

insert into customer select id, name, address from backup where id > 100;
insert into customer(id, name) select code, username from usertable;

この書式の場合、一度のINSERT文で複数のデータが追加される可能性があります。

サンプル

では実際に試してみます。

元となるテーブルを作成します。

p4-1

このテーブルに次のテーブルからデータを取得して追加します。

p4-2

「product」テーブルから「code」カラムと「name」カラムのデータを取得します。条件は「section」カラムの値が1のデータです。

ではデータを追加します。

insert into goods(id, name) select code, name from product where section = 1;

p4-3

データを取得して表示してみます。

p4-4

指定したデータだけが取得されて追加されていることが確認できました。

ビューの場合と異なり、SELECT文で取得したデータがテーブルに新しいデータとして追加されていますので、取得元のテーブルのデータとデータを追加したテーブルのデータは別々に存在しています。