戦国IT

情報処理技術者試験の過去問対策サイト

データベーススペシャリスト試験 2011年 午前208


“取引先”表, “商品”表, “注文”表の3表を基底表とするビュー“注文 123”を操作する SQL文のうち, 実行できるものはどれか。ここで, 各表の列のうち下線のあるものを主キーとする。
問題画像
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文は実行できるが、DELETEやINSERTは不可です。
  • 根拠:ビュー定義に基づき、主キーを含む単一の基底表の列のみ更新可能で、複数表結合や集約を含むビューは更新制限があるためです。
  • 差がつくポイント:ビューの更新可否の判断は、基底表の関係性や主キーの有無、ビューの定義内容を正確に理解することが重要です。

正解の理由

ビュー“注文123”は「注文」「取引先」「商品」の3表を結合し、商品番号が'123'の注文情報を抽出しています。
このビューは複数表の結合ビューですが、SELECT句に含まれる列は「注文番号」「取引先名(取引先.名称の別名)」「数量」です。
主キーは「注文番号」であり、ビューの更新は基底表「注文」の「数量」列に対して可能です。
したがって、UPDATE文で「数量」を変更するエのSQL文は実行可能です。
一方、DELETEやINSERTは複数表結合ビューのため制限され、特にINSERTはビューの列構成が基底表と一致しないため不可です。
SELECT文は文法的に誤りがあり、実行できません。

よくある誤解

ビューは単なる仮想テーブルなので、すべてのDML操作が可能と誤解しがちです。
しかし、結合や集約を含むビューは更新制限があり、特にINSERTやDELETEは制限されることが多いです。

解法ステップ

  1. ビュー定義を確認し、基底表と結合条件を把握する。
  2. ビューのSELECT句に含まれる列と主キーの有無を確認する。
  3. ビューの更新可能性のルール(単一表の主キー列を含むか)を適用する。
  4. 各SQL文の文法とビューの更新制限を照らし合わせて実行可否を判断する。

選択肢別の誤答解説

  • ア: DELETE文は複数表結合ビューに対しては制限され、実行不可です。
  • イ: INSERT文はビューの列構成が基底表と一致せず、また複数表結合ビューへの挿入は原則不可です。
  • ウ: SELECT文の「取引先.名称」はビュー“注文123”の列名ではなく、正しくは「取引先名」です。文法エラーで実行不可です。
  • エ: UPDATE文はビューの「数量」列を基底表「注文」表の列に対応しており、条件も正しいため実行可能です。

補足コラム

ビューの更新可否はSQL標準で定められており、単一表の主キー列を含むビューは更新可能です。
複数表結合ビューは更新制限が厳しく、特にINSERTやDELETEは制限されることが多いです。
ビューの列名は定義時の別名に注意し、SQL文で正確に指定する必要があります。

FAQ

Q: なぜ複数表結合のビューはINSERTできないのですか?
A: 複数表結合ビューはどの基底表にデータを挿入すべきか曖昧になるため、SQL標準で原則禁止されています。
Q: ビューの列名は元の表の列名と異なってもよいですか?
A: はい、ビュー定義でAS句を使い別名を付けることができ、SQL文ではその別名を使う必要があります。
Q: UPDATE文で複数表の列を同時に更新できますか?
A: 通常はできません。ビューの更新は単一基底表の列に限定されます。

関連キーワード: ビュー更新, SQL制約, 複数表結合ビュー, 主キー, DML操作
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ