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

テーブルにデータを追加する場合、 INSERT 文でデータを指定して追加する方法の他に、他のテーブルに格納されているデータを SELECT 文で取得し追加することもできます。ここでは SQLite でテーブルから取得したデータを別のテーブルに追加する方法について解説します。

(Last modified: )

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

他のテーブルから取得したデータをテーブルに追加する場合の書式は次の通りです。

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);

insert into user values(1, 'Yamada', 24);
insert into user values(2, 'Oota', 31);
insert into user values(3, 'Suzuki', 18);
insert into user values(4, 'Kudou', 25);
insert into user values(5, 'Nishi', 19);

他のテーブルから取得したデータをテーブルに追加する(1)

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

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

他のテーブルから取得したデータをテーブルに追加する(2)

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

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

他のテーブルから取得したデータをテーブルに追加する(3)

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

select * from olduser;

他のテーブルから取得したデータをテーブルに追加する(4)

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

-- --

別のテーブルからデータを取得してテーブルに追加する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。