平成23年度 特別 午前Ⅱ 問8
データ操作
ビューに関する問題
“取引先”表,“商品”表,“注文”表の 3 表を基底表とするビュー“注文 123”を操作する SQL 文のうち,実行できるものはどれか。ここで,各表の列のうち下線のあるものを主キーとする。
表(原典の実線の下線は …、破線の下線は〔破線の下線〕で表した):
取引先
| 取引先ID | 名称 | 住所 |
|---|---|---|
| 111 | 中央貿易 | 東京都中央区 |
| 222 | 上野商会 | 東京都台東区 |
| 333 | 目白商店 | 東京都豊島区 |
商品
| 商品番号 | 商品名 | 価格 |
|---|---|---|
| 111 | スパナ | 1,000 |
| 123 | レンチ | 1,300 |
| 313 | ドライバ | 800 |
注文
| 注文番号 | 注文日 | 取引先ID | 商品番号 | 数量 |
|---|---|---|---|---|
| 1 | 2011-04-20 | 111 | 111 | 3 |
| 2 | 2011-04-21 | 222 | 123 | 4 |
| 3 | 2011-04-22 | 111 | 313 | 3 |
| 4 | 2011-04-23 | 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 文が実行できます。
ビュー“注文123”がもつ列は、注文番号、取引先名、数量の三つだけです。ビューへの SQL 文は、この三つの列名で書かれていなければ実行できません。数量を3に更新し、取引先名が目白商店の行を対象にする UPDATE 文は、ビューの列だけで条件と更新先を書いています。表を当てはめると、商品番号123の注文は注文番号2と4で、目白商店は取引先ID333なので、注文番号4の1行が該当し、その数量は注文表の1行に対応します。ビューへの操作を見るときは、まず使っている列名がビュー定義の SELECT 句にあるかを確かめると、多くの選択肢が絞れます。
ほかの選択肢はなぜ違うのか
- アDELETE FROM 注文123 WH…:条件に使っている取引先ID は、ビューの列に含まれていません。ビューの定義は取引先ID を選んでいないので、この列名でビューの行を絞り込むことはできません。
- イINSERT INTO 注文123 VA…:ビューの列は三つですが、値を四つ並べています。列数が合わないうえ、商品名にあたるレンチを入れる列もビューにはありません。値と列の対応が取れないので実行できません。
- ウSELECT 取引先.名称 FROM 注…:取引先.名称 は基底表の列の名前で、ビューの中では取引先名という別名になっています。ビューに対しては定義で付けた列名で参照する必要があるので、この SELECT 文は実行できません。
出典:平成23年度 特別 データベーススペシャリスト試験 午前Ⅱ 問8
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)