応用情報技術者 2023年 秋期 午前2 問28
問題文
更新可能なビューを作成する SQL文はどれか。ここで、SQL文中に現れる基底表は全て更新可能とする。
選択肢
ア:
CREATE VIEW 高額商品(商品番号、商品名、 商品単価)
AS SELECT 商品番号、商品名、 商品単価 FROM 商品 WHERE 商品単価 > 1000
(正解)イ:
CREATE VIEW 受注商品(商品番号)
AS SELECT DISTINCT 商品番号 FROM 受注
ウ:
CREATE VIEW 商品受注(商品番号、 受注数量)
AS SELECT 商品番号、 SUM (受注数量) FROM 受注 GROUP BY 商品番号
エ:
CREATE VIEW 商品平均受注数量(平均受注数量)
AS SELECT AVG (受注数量) FROM 受注
更新可能なビューを作成する SQL文はどれか【午前2 解説】
要点まとめ
- 結論:アのビューは更新可能であるため正解です。
- 根拠:更新可能なビューは集約関数やDISTINCTを含まず、基底表の単純な選択で構成されている必要があります。
- 差がつくポイント:集約関数やDISTINCTを使うとビューは更新不可となるため、SQL文の構造を正確に理解することが重要です。
正解の理由
アのSQL文は「商品」テーブルから商品番号、商品名、商品単価を単純に抽出し、WHERE句で条件を付けているだけです。基底表が更新可能であれば、このビューも更新可能です。一方、他の選択肢はDISTINCTやSUM、AVGなどの集約関数を使っており、これらはビューの更新を制限します。
よくある誤解
集約関数やDISTINCTを使っても更新可能なビューになると誤解しがちですが、これらはビューの更新を不可能にします。単純なSELECT文であることが更新可能の条件です。
解法ステップ
- ビューの定義を確認し、集約関数(SUM、AVGなど)が使われているか確認する。
- DISTINCT句が使われているかをチェックする。
- 基底表が単純に選択されているかを判断する。
- 条件句(WHERE)は更新可能ビューに影響しないため、無視してよい。
- 以上の条件を満たすSQL文を選ぶ。
選択肢別の誤答解説
- イ: DISTINCTを使っているため、更新可能なビューではありません。
- ウ: SUMという集約関数を使っているため、更新不可です。
- エ: AVGという集約関数を使っているため、更新不可です。
補足コラム
更新可能なビューとは、ビューを通じて基底表のデータをINSERT、UPDATE、DELETEできるビューのことです。一般的に、単純なSELECT文(集約関数やDISTINCTを含まない)で作成されたビューが更新可能とされます。複雑なビューは更新不可となり、ビューの更新を試みるとエラーになります。
FAQ
Q: なぜ集約関数を使うとビューは更新不可になるのですか?
A: 集約関数は複数行のデータを1行にまとめるため、どの基底表の行を更新すべきか特定できなくなるからです。
A: 集約関数は複数行のデータを1行にまとめるため、どの基底表の行を更新すべきか特定できなくなるからです。
Q: WHERE句があってもビューは更新可能ですか?
A: はい。WHERE句は単に表示する行を絞るだけなので、基底表が更新可能ならビューも更新可能です。
A: はい。WHERE句は単に表示する行を絞るだけなので、基底表が更新可能ならビューも更新可能です。
関連キーワード: 更新可能ビュー、SQLビュー、集約関数、DISTINCT, 基底表、CREATE VIEW

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

