テーブルから取得したデータを別のテーブルに追加
テーブルにデータを追加する場合、 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);
次にデータを追加するテーブルを次のように作成します。
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 )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。