取得した別のテーブルのデータをテーブルに追加する(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)
);

別のテーブルのデータを取得してテーブルに追加する(1)

テーブルにいくつかのデータを追加しておきます。

insert into stafflist values
  (DEFAULT, 'Suzuki', 'Tokyo'), 
  (DEFAULT, 'Kudou', 'Osaka'), 
  (DEFAULT, 'Harada', 'Nara');

別のテーブルのデータを取得してテーブルに追加する(2)

現在 stafflist テーブルには 3 件のデータが追加されています。

別のテーブルのデータを取得してテーブルに追加する(3)

次にデータを取得する別のテーブルを作成します。

create table newcomer (
  id serial, 
  name varchar(10), 
  address varchar(10), 
  flag boolean
);

別のテーブルのデータを取得してテーブルに追加する(4)

テーブルにいくつかのデータを追加しておきます。

insert into newcomer values 
  (DEFAULT, 'Yamada', 'Nagoya', TRUE), 
  (DEFAULT, 'Mishima', 'Kanagawa', FALSE), 
  (DEFAULT, 'Yoshida', 'Tokyo', TRUE);

別のテーブルのデータを取得してテーブルに追加する(5)

newcomer テーブルには現在次のようなデータが格納されています。

別のテーブルのデータを取得してテーブルに追加する(6)

それでは newcomer テーブルから name カラムと address カラムの値を取得し stafflist テーブルに追加します。取得するデータは flag が TRUE の値だけです。次のように実行してください。

insert into stafflist (name, address) 
  select name, address from newcomer where flag = TRUE;

別のテーブルのデータを取得してテーブルに追加する(7)

newcomer テーブルからデータを取得して stafflist テーブルに追加しました。確認のために stafflist からデータを取得してみます。

別のテーブルのデータを取得してテーブルに追加する(8)

2 件のデータを newcomer テーブルから取得して stafflist テーブルに追加されていることが確認できました。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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