平成23年度 特別 データベーススペシャリスト試験 午前Ⅱ 問8
テクノロジ/データベース“取引先”表,“商品”表,“注文”表の 3 表を基底表とするビュー“注文123”を操作する SQL 文のうち,実行できるものはどれか。ここで,各表の主キーは括弧内に示すとおりとする。 取引先(主キー:取引先ID) 取引先ID,名称,住所 111,中央貿易,東京都中央区 222,上野商会,東京都台東区 333,目白商店,東京都豊島区 商品(主キー:商品番号) 商品番号,商品名,価格 111,スパナ,1000 123,レンチ,1300 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 注文.商品番号 = 商品.商品番号 (注:本サイトでは原問題の表を文字表記に変換しています)
出典:平成23年度 特別 データベーススペシャリスト試験 午前Ⅱ 問8
- アDELETE FROM 注文123 WHERE 取引先ID = '111'
- イINSERT INTO 注文123 VALUES (8, '目白商店', 'レンチ', 3)
- ウSELECT 取引先.名称 FROM 注文123
- エUPDATE 注文123 SET 数量 = 3 WHERE 取引先名 = '目白商店'
正解:エ
解説
ビュー“注文123”は,注文番号,取引先名,数量の3列から成り,商品番号='123'の行だけに限定されています。この基底表となる列や結合条件から,実行できる操作かどうかを判断します。
選択肢ごとの解説
- ア誤り。ビュー“注文123”には取引先IDという列が存在しないため,この列を条件に指定するDELETE文は実行できません。
- イ誤り。ビュー“注文123”の列は注文番号,取引先名,数量の3列ですが,INSERT文では4つの値が指定されており,列数が一致しないため実行できません。
- ウ誤り。ビュー“注文123”の定義の中でのみ使われている基底表のエイリアス“取引先”を,ビューの外側からのSELECT文で直接参照することはできません。
- エ正しい。数量は注文表に由来する列であり,取引先IDや商品番号などの主キーの一致による結合を介して一意に対応する注文表の行が定まるため,取引先名で絞り込んだ上で数量を更新するUPDATE文は実行できます。