取得した別のテーブルのデータをテーブルに追加する(INSERT ... SELECT)
INSERT コマンドを実行するときに、別のテーブルから SELECT コマンドを使って取得したデータをテーブルに追加することができます。ここでは PostgreSQL で別のテーブルから取得したデータをテーブルに追加する方法について解説します。
(Last modified: )
別のテーブルのデータを取得してテーブルに追加する
テーブルに新しいデータを追加する時に別のテーブルから SELECT コマンドを使って取得したデータを追加します。書式は次のとおりです。
INSERT INTO table_name [ ( column_name [, ...] ) ] query
query にはデータを取得する SELECT 文を記述します。
例えば別のテーブルの指定したカラムの値を取得してデータとして追加する場合は次のような書式になります。
INSERT INTO table_name1 ( c_name_a1, c_name_a2 ) SELECT c_name_b1, c_name_b2 FROM table_name2 [WHERE ...]
カラムの数とデータ型がまったく同じテーブルからすべてのカラムの値を取得してデータとして追加する場合は次の書式も利用できます。
INSERT INTO table_name1 SELECT * FROM table_name2 [WHERE ...]
-- --
それでは実際に試してみます。データを追加するテーブルとして次のようなテーブルを mydb データベースの public スキーマの中に作成しました。
create table stafflist ( id serial, name varchar(10), address varchar(10) );
テーブルにいくつかのデータを追加しておきます。
insert into stafflist values (DEFAULT, 'Suzuki', 'Tokyo'), (DEFAULT, 'Kudou', 'Osaka'), (DEFAULT, 'Harada', 'Nara');
現在 stafflist テーブルには 3 件のデータが追加されています。
次にデータを取得する別のテーブルを作成します。
create table newcomer ( id serial, name varchar(10), address varchar(10), flag boolean );
テーブルにいくつかのデータを追加しておきます。
insert into newcomer values (DEFAULT, 'Yamada', 'Nagoya', TRUE), (DEFAULT, 'Mishima', 'Kanagawa', FALSE), (DEFAULT, 'Yoshida', 'Tokyo', TRUE);
newcomer テーブルには現在次のようなデータが格納されています。
それでは newcomer テーブルから name カラムと address カラムの値を取得し stafflist テーブルに追加します。取得するデータは flag が TRUE の値だけです。次のように実行してください。
insert into stafflist (name, address) select name, address from newcomer where flag = TRUE;
newcomer テーブルからデータを取得して stafflist テーブルに追加しました。確認のために stafflist からデータを取得してみます。
2 件のデータを newcomer テーブルから取得して stafflist テーブルに追加されていることが確認できました。
-- --
INSERT コマンドを使って別のテーブルからデータを取得してテーブルに追加する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。