他のテーブルから取得したデータを追加
値を指定してデータを追加するかわりに、他のテーブルに含まれているデータを取得して追加することできます。次の書式を使います。
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文で複数のデータが追加される可能性があります。
サンプル
では実際に試してみます。
元となるテーブルを作成します。
このテーブルに次のテーブルからデータを取得して追加します。
「product」テーブルから「code」カラムと「name」カラムのデータを取得します。条件は「section」カラムの値が1のデータです。
ではデータを追加します。
insert into goods(id, name) select code, name from product where section = 1;
データを取得して表示してみます。
指定したデータだけが取得されて追加されていることが確認できました。
ビューの場合と異なり、SELECT文で取得したデータがテーブルに新しいデータとして追加されていますので、取得元のテーブルのデータとデータを追加したテーブルのデータは別々に存在しています。