Previous: values を使った新しい行の追加
Up: insert での行の挿入
Previous Page: values を使った新しい行の追加

insertの中のselect文

valuesを使った行の挿入は、全く新しいテーブルをつくる時には必要だが、もしも、 既にあるテーブルを加工して新しいテーブルをつくる場合には、selectを使った挿入が 便利である。次の例は、元からあるテーブル「利用者台帳」利用して、新しいテーブル 「利用者台帳稚内編」をつくる例である。

例 72: 古いテーブルを利用して新しいテーブルをつくる

insert into 利用者台帳稚内編
	select  *
	from    利用者台帳
	where   住所 like '%稚内%'

valuesを使った挿入では、一つのinsert文で一行の挿入しか出来なかったが、selectを 使ったこの形式では、selectが返す複数の行が、ただちに新しいテーブルに取り込まれ ることになる。 この例では、二つのテーブルは、順序を含めて対応する項目のデータのタイプが同じで なければならない。もしも、項目の数や順序が一致しないのなら、insert into のテー ブル名( 項目名リスト ... )の項目名リストの部分と、selectのうしろの項目名リスト の部分とで調整すれば良い。

例 73: 貸出図書一覧の作成

insert into 貸出図書一覧
	select 書籍台帳.書籍番号,書籍台帳.書名
	from   貸出台帳,蔵書台帳,書籍台帳 
	where  貸出台帳.登録番号 = 蔵書台帳.登録番号
	  and  蔵書台帳.書籍番号 = 書籍台帳.書籍番号

この例では、テーブル「貸出図書一覧」は、項目「書籍番号」と項目「書名」と 同じデータ・タイプを持った項目から、出来ていなければならない。 もっとも、この例のような場合なら、実際には、こうした形で新しくテーブルをつくる のではなく、viewをつくるのが普通である。viewについては、後でふれるだろう。

実は、これらの処理は、次のような構文で、select文単独でも可能である。

例 74: select ... into での書き換え

select  *
	into    利用者台帳稚内編
	from    利用者台帳
	where   住所 like '%稚内%'

select 書籍台帳.書籍番号,書籍台帳.書名 into 貸出図書一覧 from 貸出台帳,蔵書台帳,書籍台帳 where 貸出台帳.登録番号 = 蔵書台帳.登録番号 and 蔵書台帳.書籍番号 = 書籍台帳.書籍番号

selectの計算式を扱う能力を利用すると、古いテーブルの数値を操作して、新しいテー ブルを作成することが出来る。

例 75: 計算式の利用

insert into 新定価表(書籍番号,書名,定価(消費税込み))
	select 書籍番号 , 書名 , 定価 * 1.03
	from   書籍台帳

ここでは、新しい項目「定価(消費税込み)」は、select文で計算されている。

maruyama@wakhok.ac.jp
1995年02月10日 (金) 00時49分16秒 JST