応用情報技術者 2011年 秋期 午前2 問30
問題文
更新可能なビューを作成するSQL文はどれか。ここで,SQL文中に現れる表は全て更新可能とする。
選択肢
ア:
CREATE VIEW 高額商品(商品番号、 商品名、 商品単価)
AS SELECT 商品番号、 商品名、 商品単価 FROM 商品 WHERE 商品単価 > 1000
(正解)イ:
CREATE VIEW 受注商品(商品番号)
AS SELECT DISTINCT 商品番号 FROM 受注
ウ:
CREATE VIEW 商品受注(商品番号、 受注数量)
AS SELECT 商品番号、 SUM(受注数量) FROM 受注 GROUP BY 商品番号
エ:
AS SELECT AVG(受注数量) FROM 受注
更新可能なビューを作成するSQL文はどれか【午前2 解説】
要点まとめ
- 結論:更新可能なビューは単純なSELECT文で作成され、集約関数やDISTINCTを含まないものが該当します。
- 根拠:ビューの更新可能性は、基になるテーブルの一意性や集約関数の有無、GROUP BYの使用などで制限されます。
- 差がつくポイント:集約関数やDISTINCTを含むビューは更新不可であるため、これらを含まないビューを選ぶことが重要です。
正解の理由
アは、商品テーブルから商品番号、商品名、商品単価を単純に抽出し、WHERE句で条件を付けただけのビューです。基になるテーブルが更新可能であれば、このビューも更新可能です。
一方、イはDISTINCTを使っており、ウはSUMとGROUP BYを使い、エはAVGを使っているため、これらは集約や重複排除を伴い、更新可能なビューとはなりません。
一方、イはDISTINCTを使っており、ウはSUMとGROUP BYを使い、エはAVGを使っているため、これらは集約や重複排除を伴い、更新可能なビューとはなりません。
よくある誤解
ビューにWHERE句があると更新できないと思い込むことがありますが、WHERE句は更新可能性に影響しません。
また、集約関数やDISTINCTがあると更新不可になる点を見落としがちです。
また、集約関数やDISTINCTがあると更新不可になる点を見落としがちです。
解法ステップ
- ビューの定義を確認し、集約関数(SUM, AVGなど)が含まれていないか確認する。
- DISTINCTやGROUP BYが使われていないかをチェックする。
- 単純なSELECT文であれば更新可能と判断する。
- 各選択肢のSQL文を比較し、条件に合うものを選ぶ。
選択肢別の誤答解説
- イ:DISTINCTを使っているため、重複排除が行われており更新不可です。
- ウ:SUM関数とGROUP BYを使っているため、集約ビューで更新できません。
- エ:AVG関数を使った集約ビューであり、更新は不可能です。
補足コラム
更新可能なビューは、基になるテーブルの行に一対一で対応し、集約や重複排除を行わない単純なSELECT文で作成されます。
SQL標準や各DBMSの仕様により細かい制約は異なりますが、基本的な考え方は共通しています。
SQL標準や各DBMSの仕様により細かい制約は異なりますが、基本的な考え方は共通しています。
FAQ
Q: WHERE句があるビューは更新できないのですか?
A: いいえ、WHERE句は更新可能性に影響しません。単純な条件指定は問題ありません。
A: いいえ、WHERE句は更新可能性に影響しません。単純な条件指定は問題ありません。
Q: 集約関数を使ったビューはなぜ更新できないのですか?
A: 集約関数は複数行のデータをまとめるため、元の行に戻せず更新が不可能です。
A: 集約関数は複数行のデータをまとめるため、元の行に戻せず更新が不可能です。
関連キーワード: SQL, ビュー、更新可能ビュー、集約関数、DISTINCT, GROUP BY

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

