テーブルから取得したデータを別のテーブルに追加
他のテーブルに格納されているデータを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);
次にデータを追加するテーブルを次のように作成します。
create table olduser(userid integer, name text, address text);
userテーブルから「old」カラムの値が20より大きいデータを取得し、「id」カラムと「name」カラムの値をolduserテーブルに追加します。
insert into olduser(userid, name) select id, name from user where old > 20;
データが追加されたかどうかolduserテーブルからデータを取得してみます。(下記では比較できるようにまずuserテーブルのデータを取得しています)。
select * from olduser;
このように元のテーブルの「old」カラムの値が20より大きいデータだけを取得し別のテーブルに追加することができました。なおデータを追加する時にolduserテーブルの「address」カラムには値を指定していませんのでデフォルトの値のNULLが格納されています。
( Written by Tatsuo Ikura )