SQLite | データの追加・更新・削除 | 別のテーブルから取得したデータを追加する
INSERT文で明示的に指定した値を追加するほかに、SELECT文で別のテーブルから取得した行も追加できます。ここでは、その方法を説明します。
別のテーブルから取得したデータを追加する
構文は次のとおりです。
INSERT INTO テーブル名 SQL文;
追加先テーブルの列数とクエリ結果の列数は同じである必要があります。列名は異なっていても問題ありません。
INSERT INTO テーブル1 SELECT C1, C2, C3 FROM テーブル2 WHERE 条件式;
この例では、テーブル1に3つの列が定義されている必要があります。
追加先の列も指定できます。
INSERT INTO テーブル名 (列名1, 列名2, ...) 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, 'devkuma', 24);
insert into user values (2, 'kimkc', 31);
insert into user values (3, 'araikuma', 18);
insert into user values (4, 'happykuma', 25);
insert into user values (5, 'mykuma', 19);
sqlite> create table user (id integer, name text, old integer);
sqlite>
sqlite> insert into user values (1, 'devkuma', 24);
sqlite> insert into user values (2, 'kimkc', 31);
sqlite> insert into user values (3, 'araikuma', 18);
sqlite> insert into user values (4, 'happykuma', 25);
sqlite> insert into user values (5, 'mykuma', 19);
sqlite>
追加先テーブルを作成します。
create table olduser (id integer, name text, address text);
sqlite> create table olduser (id integer, name text, address text);
sqlite>
userテーブルからold列が20より大きい行を選択し、id列とname列の値をolduserテーブルに追加します。
insert into olduser (id, name) select id, name from user where old> 20;
sqlite> insert into olduser (id, name) select id, name from user where old> 20;
sqlite>
olduserテーブルを照会して、追加された行を確認します。例では比較のために先にuserテーブルを照会しています。
select * from olduser;
sqlite> select * from user;
id name old
---------- ---------- ----------
1 devkuma 24
2 kimkc 31
3 araikuma 18
4 happykuma 25
5 mykuma 19
sqlite>
sqlite> select * from olduser;
id name address
---------- ---------- ----------
1 devkuma
2 kimkc
4 happykuma
sqlite>
old列が20より大きいソース行だけが追加されました。olduserのaddress列の値は指定していないため、デフォルト値のNULLが保存されます。