Symfoware(R) Server SQLビギナーズガイド - FUJITSU -
目次 索引 前ページ次ページ

上へ第3章 データを変更する方法
上へ3.1 データベースにデータを追加する

3.1.4 別の表のデータを追加する

応用プログラムの処理によっては、ある表から取り出したデータを、別の表に追加したいことがあります。この場合に、単一行SELECT文あるいはカーソルを使用してデータを取り出してから追加していたのでは効率がよくありません。INSERT文では、ある表のデータを別の表に追加することができます。追加するデータを表から取り出すには、問合せ指を使用します。指定例を以下に示します。

例1

第二在庫表という名前の表に、在庫表から製品名が“テレビ”の行を追加します。
INSERT INTO  在庫管理.第二在庫表 (COL1, COL2, COL3, COL4)

    SELECT 製品番号, 製品名, 在庫数量, 倉庫番号
              (1)
   FROM 在庫管理.在庫表 WHERE 製品名 = N'テレビ' 
              (1)

(1) 問合せ指定

図:問合せ指定によるデータの追加(列の構成が対応している場合)

image

備考. 在庫表のデータに変化はありません。

例1では、データを追加する表と、データを取り出す表の間で、列の構成は1対1に対応していました。一般的には、両方の表の間で列の構成がこのように対応しているとは限りません。ある表の一部の列のデータを別の表に追加したり、データを追加する表の特定の列には、あらかじめ応用プログラムで決めた値を追加したい場合もあります。次に、このような例を示します。

ここで、表名がカセット管理表という表があるとします。この表は、カセットデッキとカセットテープの在庫数量と発注数量を蓄積するのに使用します。この表は、製品番号、種別、数量、および区分の4つの列で構成されます。種別には、カセットデッキは“D”、カセットテープは“T”が設定されます。また、数量には在庫および発注の数量、区分には、在庫は“1”、1つの取引先への発注は“2”、複数の取引先への発注は“3”が設定されます。

例2

カセット管理表に、在庫表の製品番号および在庫数量を追加します。また、種別はカセットデッキを示す“D”とし、区分は、在庫を示す“1”がホスト変数“PART”に設定されているとします。
INSERT INTO 在庫管理.カセット管理表(製品番号, 種別, 数量, 区分)

   SELECT 製品番号, 'D', 在庫数量, :PART

    FROM 在庫管理.在庫表 WHERE 製品名 = N'カセットデッキ'

図:問合せ指定によるデータの追加(列の構成が対応していない場合)

image

備考.在庫表のデータに変化はありません。

問合せ指定では、表から特定の値を取り出すほかに、複数の表を関連づけて操作したり、表をグループ化して値を集計することができます。その例を以下に示します。詳細については、“複数の表を関連づけて操作する方法”および“表をグループ化してデータを操作する”で説明しています。“図:複雑な問合せ指定によるデータの追加”では内容は気にせず、問合せ指定を使用したイメージを見てください。

 

例3

カセット管理表に、発注表の取引製品および取引製品ごとの発注数量の合計を追加します。追加するデータは、複数の取引先に発注しているものだけとします。また、種別はカセットデッキを示す“D”とし、区分は、複数の取引先への発注を示す“3”がホスト変数“PART”に設定されているとします。
INSERT INTO 在庫管理.カセット管理表 (製品番号, 種別, 数量, 区分)

   SELECT 取引製品, 'D', SUM(発注数量), :PART

      FROM 在庫管理.発注表, 在庫管理.在庫表

      WHERE 取引製品 = 製品番号 AND 製品名 = N'カセットデッキ'

      GROUP BY 取引製品

      HAVING COUNT(取引先) >= 2

図:複雑な問合せ指定によるデータの追加

imageimage

備考.発注表および在庫表のデータに変化はありません。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2003