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

広告

他のテーブルに格納されているデータをSELECT文で取得し、別のテーブルに追加する方法について解説します。

書式は次の通りです。

INSERT INTO テーブル名 SQL文;

データを追加するテーブルに含まれるカラムの数と、SQL文で取得するカラムの数は同じである必要があります。(カラム名は異なっていても構いません)。例えば次のようになります。

INSERT INTO テーブル1 SELECT C1, C2, C3 FROM テーブル2 WHERE …;

上記ではテーブル1で定義されているカラムの数は3である必要があります。

データを追加するカラムを指定することもできます。次の書式を使います。

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

この場合もデータを追加するカラムの数と、SQL文で取得するカラムの数は同じである必要があります。例えば次のようになります。

INSERT INTO テーブル1(N1, N2, N3) SELECT C1, C2, C3 FROM テーブル2 WHERE …;

では実際に試してみます。元になるテーブルとして次のようなテーブルを作成し、データをいくつか追加しました。

create table user(id integer, name text, old integer);

p4-1

次にデータを追加するテーブルを次のように作成します。

create table olduser(userid integer, name text, address text);

p4-2

userテーブルから「old」カラムの値が20より大きいデータを取得し、「id」カラムと「name」カラムの値をolduserテーブルに追加します。

insert into olduser(userid, name) select id, name from user where old > 20;

p4-3

データが追加されたかどうかolduserテーブルからデータを取得してみます。(下記では比較できるようにまずuserテーブルのデータを取得しています)。

select * from olduser;

p4-4

このように元のテーブルの「old」カラムの値が20より大きいデータだけを取得し別のテーブルに追加することができました。なおデータを追加する時にolduserテーブルの「address」カラムには値を指定していませんのでデフォルトの値のNULLが格納されています。

( Written by Tatsuo Ikura )