平成25年度 春期 午前Ⅱ 問11
データ操作
ビューに関する問題
三つの表“取引先”,“商品”,“注文”を基底表とするビュー“注文123”を操作する SQL 文のうち,実行できるものはどれか。ここで,各表の列のうち下線のあるものを主キーとする。
取引先
| 取引先ID | 名称 | 住所 |
|---|---|---|
| 111 | 中央貿易 | 東京都中央区 |
| 222 | 上野商会 | 東京都台東区 |
| 333 | 目白商店 | 東京都豊島区 |
商品
| 商品番号 | 商品名 | 価格 |
|---|---|---|
| 111 | スパナ | 1,000 |
| 123 | レンチ | 1,300 |
| 313 | ドライバ | 800 |
注文
| 注文番号 | 注文日 | 取引先ID | 商品番号 | 数量 |
|---|---|---|---|---|
| 1 | 2013-04-17 | 111 | 111 | 3 |
| 2 | 2013-04-18 | 222 | 123 | 4 |
| 3 | 2013-04-19 | 111 | 313 | 3 |
| 4 | 2013-04-20 | 333 | 123 | 2 |
〔ビュー“注文123”の定義〕
CREATE VIEW 注文123 AS
SELECT 注文番号, 取引先.名称 AS 取引先名, 数量
FROM 注文, 取引先, 商品
WHERE 注文.商品番号 = '123'
AND 注文.取引先ID = 取引先.取引先ID
AND 注文.商品番号 = 商品.商品番号- アDELETE FROM 注文123 WHERE 取引先ID = '111'
- イINSERT INTO 注文123 VALUES (8, '目白商店', 'レンチ', 3)
- ウSELECT 取引先.名称 FROM 注文123
- エUPDATE 注文123 SET 数量 = 3 WHERE 取引先名 = '目白商店'
答えと解説を見る
✓ これが正解エUPDATE 注文123 SET 数量 = 3 WHERE 取引先名 = '目白商店'
解説
ビューの列名だけで書かれているのは、数量を更新する UPDATE 文です。
ビューに対する SQL 文では、ビューの定義で選択項目にした列だけを、その列名で使えます。ビュー注文123の列は、注文番号、取引先名(取引先.名称に付けた別名)、数量の三つです。UPDATE 注文123 SET 数量 = 3 WHERE 取引先名 = '目白商店' は、更新する列も条件の列もビューの列名で書かれています。ビューの行を基底表にたどると、目白商店の商品123の注文は注文番号4の1行だけで、更新する数量もこの行の注文表の列に一つだけ対応します。ビューを操作する文を見るときは、まずビューの列の一覧を書き出し、文に出てくる列名と突き合わせると判断できます。
ほかの選択肢はなぜ違うのか
- アDELETE FROM 注文123 WH…:取引先ID はビューの選択項目に含まれていないので、ビューに対する条件には書けません。さらに、この行を削除するとき、基底表の注文、取引先、商品のどれから行を消すのかも決められません。
- イINSERT INTO 注文123 VA…:ビューの列は三つなのに、VALUES に四つの値を並べていて数が合いません。レンチという商品名に当たる列もビューにはなく、取引先や商品の表に新しい行を作るのかも定まらないので実行できません。
- ウSELECT 取引先.名称 FROM 注…:ビューを操作するときに使えるのは、ビューの列名だけです。取引先.名称は基底表の側の書き方で、ビューではこの列に取引先名という別名が付いているため、このままでは列を特定できません。
出典:平成25年度 春期 データベーススペシャリスト試験 午前Ⅱ 問11
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)