取得した別のテーブルのデータをテーブルに追加する(INSERT ... SELECT)

広告
eyecatch

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

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

テーブルに新しいデータを追加する時に別のテーブルから 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 コマンドを使って別のテーブルからデータを取得してテーブルに追加する方法について解説しました。

PostgreSQLの使い方の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。