ア:DELETE FROM 注文123 WHERE 取引先ID = '111'
イ:INSERT INTO 注文123 VALUES (8, '目白商店', 'レンチ', 3)
ウ:SELECT 取引先.名称 FROM 注文123
エ:UPDATE 注文123 SET 数量 = 3 WHERE 取引先名='目白商店'
(正解)
解説
三つの表取引先、商品、注文基底表上に注文123操作をするSQL文のうち、実行できるものはどれか【午前2 解説】
要点まとめ
- 結論:ビュー「注文123」は更新可能なビューであり、UPDATE文は実行可能であるためエが正解です。
- 根拠:ビュー定義に主キーが含まれ、単一の基底表の列に対応しているため、更新可能なビューとして扱われます。
- 差がつくポイント:ビューの更新可否の判断は、ビューの定義内容と基底表の主キーの有無、列の対応関係を正確に理解することが重要です。
正解の理由
ビュー「注文123」は注文、取引先、商品の3表を結合して作成されていますが、WHERE句で注文.商品番号 = '123' に限定し、注文番号、取引先名(取引先.名称の別名)、数量の3列を選択しています。
このビューは注文基底表の注文番号を主キーとして含み、かつ取引先名は取引先表の名称を別名で表示しているだけです。
UPDATE文はビューの中の「数量」列を変更するもので、これは注文基底表の数量列に対応しているため、ビューを通じて更新可能です。
したがって、エの「UPDATE 注文123 SET 数量 = 3 WHERE 取引先名='目白商店'」は実行可能です。
よくある誤解
ビューは基本的に読み取り専用と思い込み、更新可能かどうかを判断しないことが多いです。
また、ビューに含まれる列が複数の基底表からのものであっても、更新可能な場合があることを理解していないことも誤解の原因です。
解法ステップ
- ビュー「注文123」の定義を確認し、どの基底表のどの列が選択されているか把握する。
- ビューに主キー(注文番号)が含まれているか確認する。
- 各選択肢のSQL文がビューの更新可能性に合致しているか検討する。
- DELETEやINSERTがビューで可能かどうか、ビューの定義と主キーの有無から判断する。
- UPDATE文が基底表の列に対応していれば実行可能と判断し、正解を選ぶ。
選択肢別の誤答解説
- ア: DELETE文はビューの主キーが含まれていても、複数表の結合ビューでは削除が制限される場合が多く、実行できない。
- イ: INSERT文はビューの列が基底表の複数列にまたがっているため、直接挿入はできずエラーになる。
- ウ: SELECT文は構文的に誤り。ビュー「注文123」に「取引先.名称」という列はなく、「取引先名」が正しい列名。
- エ: UPDATE文はビューの「数量」列が注文基底表の列に対応し、更新可能なため実行できる。
補足コラム
ビューの更新可能性はSQL標準で定められており、単一表の列を直接参照するビューは更新可能です。
複数表の結合ビューでも、主キーが含まれ、更新対象列が一つの基底表に限定されていればUPDATEは可能です。
ただし、INSERTやDELETEは制限が厳しく、特に複数表結合ビューでは実行できないことが多いです。
FAQ
Q: ビューのUPDATEはなぜ可能なのですか?
A: ビューが基底表の主キーを含み、更新対象列が単一の基底表に対応しているため、基底表のデータを直接更新できるからです。
Q: なぜDELETEやINSERTは実行できないのですか?
A: 複数表の結合ビューでは、どの基底表の行を削除・挿入すべきか曖昧になるため、SQL標準で制限されています。
関連キーワード: SQLビュー更新, 更新可能ビュー, 主キー, 複数表結合ビュー, SQL文実行可否