ホーム > データベーススペシャリスト試験 > 2011年
データベーススペシャリスト試験 2011年 午前2 問08
“取引先”表, “商品”表, “注文”表の3表を基底表とするビュー“注文 123”を操作する SQL文のうち, 実行できるものはどれか。ここで, 各表の列のうち下線のあるものを主キーとする。

ア:
DELETE FROM 注文 123 WHERE 取引先 ID = '111'
イ:
INSERT INTO 注文 123 VALUES (8, '目白商店', 'レンチ', 3)
ウ:
SELECT 取引先.名称 FROM 注文123
エ:
UPDATE 注文123 SET 数量 = 3 WHERE 取引先名='目白商店'
(正解)解説
ビュー 「注文 123」 をもう一度確認
CREATE VIEW 注文123 AS
SELECT 注文番号,
取引先.名称 AS 取引先名,
数量
FROM 注文, 取引先, 商品
WHERE 注文.商品番号 = '123' -- ① 商品は常に 123
AND 注文.取引先ID = 取引先.取引先ID -- ② 注文→取引先を結合
AND 注文.商品番号 = 商品.商品番号; -- ③ 注文→商品を結合
- 主キー(注文番号)で一意に “1 注文行” に対応 しているため、
注文表 の列だけを更新する操作は SQL-92 の規定上「可能な更新可能ビュー」です。 - ただし 挿入・削除 となると、複数表をまたぐため標準では不可。
(INSTEAD OF トリガを用意する等の前提は試験問題では考えない) - ビューに含まれない列名を参照すると文法エラー。
各選択肢を検証
なぜ エ だけが実行できるのか
WHERE 取引先名 = '目白商店'
でビュー行は一意(注文番号=4)。- 更新する列 数量 は “注文” 表にのみ存在。
- 取引先名(別表列)は検索条件に使うだけで、変えない。
- SQL 標準 15.1 c)
「ビューが多表結合を含んでいても、一意決定できる1つの基表の列のみを更新する場合は updatable である」
結論
エ のUPDATE
文だけがエラーなく実行できる。