データベース 第2部 データベース 5 データベースの変更処理


 

5 データベースの変更処理

ここでは、データの変更処理として、データの追加・更新・削除について説明します。

5.1 データの追加

データの追加は、実在表に対して行うが、SQLでは「INSERT文」により操作します。

データの追加
  INSERT INTO 表名(列名, ...)  ← 追加する表と列を指定する(列の順番通りならば、かっこを含め列名を省略できる)
       VALUES (値, ...)     ← 追加する値(列の順番に対応)を指定する
  

例えば、「[顧客]に新規の顧客情報("2001"、"株式会社こあら百貨店"、"埼玉県入間市東町1-XX", "042-119-XXXX")を追加する」は、次のようになります。

INSERT INTO 顧客(顧客番号, 顧客名, 住所, 電話番号)
     VALUES ("2001", 
             "株式会社こあら百貨店",
             "埼玉県入間市東町1-XX",
             "042-119-XXXX")
  
ACCESSの「クエリデザイン」
     
フィールド: 式1: "2001"式2: "株式会社こ式3: "埼玉県入間式4: "042-119-X
テーブル:     
並べ替え:     
レコードの追加: 顧客番号顧客名住所電話番号
抽出条件:     
または:     

顧客
顧客番号顧客名住所電話番号 
1001株式会社冨田貿易東京都港区芝浦1-X-XX03-3256-XXXX
1003宇宙商事株式会社東京都足立区神明22-XX03-5126-XXXX
1006有限会社吉野物産大阪府大阪市中央区城見23-XX06-6112-XXXX
1010広島商店株式会社広島県広島市中区基町5-XX 
2001株式会社こあら百貨店埼玉県入間市東町1-XX042-119-XXXX← 追加

このとき、VALUES文節に続くデータ値は、表名の後ろに示す列名と対応します。ただし、追加するデータの列名と順番が、追加される表の列名と順番に一致するときは、INSERT INTO に続く表名の後ろに列名を指定しなくてもかまいません。

INSERT INTO 顧客
     VALUES ("2001", "株式会社こあら百貨店", "埼玉県入間市東町1-XX", "042-119-XXXX")
  

ACCESSでは …
「クエリデザイン」で、上記のようなSQLを作成する場合には、次のように行う。
  1. SELECT文のクエリの同様に作成するが、「テーブルの表示」で表を選ばない(表名をクリックせず、「閉じる」ボタンをクリックする)。
  2. メニュー「デザイン」-「追加」を選択する(最初は「選択」が選ばれている)。
  3. 表示された「追加」ダイアログで、追加先のテーブル名として[顧客]を指定する。
  4. 右上図のように作成する(ただし、"式n:"などは、自動的に付加された別名)。
  5. SQLを動かすには、メニュー「デザイン」-「実行」をクリックする。

ただし、SQL文を確認すると、次のように VALUES ではなく SELECT になっていますが、VALUES と同じように動作します。

INSERT INTO 顧客
  SELECT "2001" AS 式1, "株式会社こあら百貨店" AS 式2, 
         "埼玉県入間市東町1-XX" AS 式3, "042-119-XXXX" AS 式4

ACCESSでは …
「SQL」ビューでは、INSERT INTO 表名 ~ VALUES ~ が、INSERT INTO 表名 ~ SELECT ~ と表示される。


上記の INSERT 文は、追加したいデータを直接SQL文に記述している。したがって、100件のデータを追加したければ、100もの INSERT 文が必要となります。

このとき、もし別の表に追加したいデータがある場合なら、その表からデータを抽出して INSERT できれば、とても楽になります。それには次のように記述します。

データの追加
INSERT INTO 表名(列名, ...) ← 追加する表と列を指定する(列の順番通りならば、かっこを含め列名を省略できる)
  SELECT ...         ← データを抽出するSELECT文を指定する

例えば、「[顧客]に[法人]の内、[エリア]が "02" のデータのみを追加する」は、次のようになります。

INSERT INTO 顧客(顧客番号, 顧客名, 住所, 電話番号)
  SELECT 法人コード, 法人名, 住所, 電話番号
    FROM 法人
   WHERE エリア="02"
ACCESSの「クエリデザイン」
      
フィールド: 法人コード法人名住所電話番号エリア
テーブル: 法人法人法人法人法人
並べ替え:      
レコードの追加: 顧客番号顧客名住所電話番号 
抽出条件:     "02"
または:      


ACCESSでは …
「クエリデザイン」で、上記のようなSQLを作成する場合には、次のように行う。
  1. SELECT文のクエリの同様に作成するが、「テーブルの表示」で SELECT の対象となる表である[法人]を選ぶ。
  2. メニュー「デザイン」-「追加」を選択する(最初は「選択」が選ばれている)。
  3. 表示された「追加」ダイアログで、追加先のテーブル名として[顧客]を指定する。
  4. 右図のように作成する。
  5. SQLを動かすには、メニュー「デザイン」-「実行」をクリックする(「表示」は SELECT 文の結果が表示される)。






 ┌──
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 └─→
法人
法人番号法人名住所電話番号備考エリア
3001仙台商店株式会社仙台市青葉区上杉1-XX022-225-XXXX宮城県02
3002株式会社青森商店青森市柳川1-XX017-739-XXXX 02
3003株式会社福岡商店福岡市中央区天神2-XX092-283-XXXX 08

SELECT 法人番号, 法人名, 住所, 電話番号 FROM 法人
 WHERE エリア = "02"

 
顧客
顧客番号顧客名住所電話番号 
1001株式会社冨田貿易東京都港区芝浦1-X-XX03-3256-XXXX
1003宇宙商事株式会社東京都足立区神明22-XX03-5126-XXXX
1006有限会社吉野物産大阪府大阪市中央区城見23-XX06-6112-XXXX
1010広島商店株式会社広島県広島市中区基町5-XX 
2001株式会社こあら百貨店埼玉県入間市東町1-XX042-119-XXXX
3001仙台商店株式会社仙台市青葉区上杉1-XX022-225-XXXX← 追加
3002株式会社青森商店青森市柳川1-XX017-739-XXXX← 追加




例題 12
次の①~②のSQL文を作成し、更新後の結果とともに答えてください。

[商品]に、[商品番号]が "M01"、[商品名]が "マウス1型"、[単価]が 1000 の商品を追加する。
「新製品」から、[商品番号]が "D" で始まる商品を[商品]に追加する。


5.2 データの更新

 

データの更新は、実在表の特定の行の値を更新することで、SQLでは「UPDATE文」により操作します。

データの更新
UPDATE 表名            ← 更新する表を指定する
   SET 列名=値, ...        ← 更新する列と値(式)を指定する
 WHERE 探索条件          ← 更新する行を特定する条件を指定する

例えば、「[商品]のディスプレイの[単価]を10%値下げする」は、次のようになります。

ACCESSの「クエリデザイン」
    
フィールド: 単価商品名 
テーブル: 商品商品 
レコードの更新: [単価]*0.9  
抽出条件:  Like "ディスプレイ*" 
または:    
UPDATE 商品
   SET 単価 = [単価]*0.9 ← []は列名であることの明示
 WHERE 商品名 Like "ディスプレイ*"
商品
商品番号商品名単価 
A01テレビ(液晶大型)
\200,000
 
A11テレビ(液晶小型)
\50,000
DX1ディスプレイ1型
\22,500
← 更新
DX2ディスプレイ2型
\25,200
← 更新
G02DVDレコーダ
\80,000
 
M01マウス1型
\1,000
S05ラジオ
\3,000
Z01冷蔵庫
\150,000
Z11エアコン
\98,000


ACCESSでは …
「クエリデザイン」で、上記のようなSQLを作成する場合には、次のように行う。
  1. SELECT文のクエリの同様に作成するが、「テーブルの表示」で 更新の対象となる表である[商品]を選ぶ。
  2. メニュー「デザイン」-「更新」を選択する(最初は「選択」が選ばれている)。
  3. 右図のように作成する([単価]のように、[ ] で囲まれているのは、列名であることを示している。[ ] で囲まないと文字列として扱われてしまう)。
  4. SQLを動かすには、メニュー「デザイン」-「実行」をクリックする(「表示」は 変更される行が表示される)。




例題 13
次の①~②のSQL文を作成し、更新後の結果とともに答えてください。

[商品]の[商品番号]が "M01" の商品の[商品名]を "コードレスマウス" にする。
[商品]の[商品番号]が "DX1" の商品の[単価]を元の価格の 1,000円引きにする。


5.3 データの削除

 

データの削除は、実在表の特定の行の値を削除することで、SQLでは「DELETE文」により操作します。

ACCESSの「クエリデザイン」
    
フィールド: 顧客番号  
テーブル: 顧客  
レコードの削除: Where  
抽出条件: Like "2*"  
または:    
データの削除
DELETE 
  FROM 表名     ← 削除する表を指定する
 WHERE 探索条件   ← 削除する行を特定する条件を指定する









例えば、「[顧客]から [顧客番号]が "2" から始まるデータを削除する」は、次のようになります。

DELETE 顧客番号 ← ACCESSでは、フィールドに記述した列名が表示される
  FROM 顧客
 WHERE 顧客番号 Like "2*"


商品("2001"の顧客を追加していた場合 )
顧客番号顧客名住所電話番号 
1001株式会社冨田貿易東京都港区芝浦1-X-XX03-3256-XXXX
1003宇宙商事株式会社東京都足立区神明22-XX03-5126-XXXX
1006有限会社吉野物産大阪府大阪市中央区城見23-XX06-6112-XXXX
1010広島商店株式会社広島県広島市中区基町5-XX 
#Deleted#Deleted#Deleted#Deleted← 削除
3001仙台商店株式会社仙台市青葉区上杉1-XX022-225-XXXX 
3002株式会社青森商店青森市柳川1-XX017-739-XXXX


ACCESSでは …
「クエリデザイン」で、上記のようなSQLを作成する場合には、次のように行う。
  1. SELECT文のクエリの同様に作成するが、「テーブルの表示」で 削除の対象となる表である[顧客]を選ぶ。
  2. メニュー「デザイン」-「削除」を選択する(最初は「選択」が選ばれている)。
  3. 右上図のように作成する。
  4. SQLを動かすには、メニュー「デザイン」-「実行」をクリックする(「表示」は 削除される行が表示される)。

ACCESSでは …
削除直後は削除された行の各列に #Deleted が表示される。
メニューの「ホーム」-「すべて更新」をクリックすると、削除された行が表示されなくなる。




例題 14
「[商品]の[商品番号]が "M01" の商品と[商品名]が "ディスプレイ" で始まる商品を削除する」というSQL文を作成し、更新後の結果とともに答えてください。