令和5年度 秋期 午前 問28
データベース
ビューを作成するSQL文
更新可能なビューを作成する 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 受注
答えと解説を見る
✓ これが正解アCREATE VIEW 高額商品(商品番号, 商品名, 商品単価) AS SELECT 商品番号, 商品名, 商品単価 FROM 商品 WHERE 商品単価>1000
解説
元の一行に戻せるビューだけ更新できます。
設問は、更新可能なビューを作成する SQL 文を選ばせています。ビューを更新するということは、結局のところ元の表のどの行を書き換えるかを決めることです。ですから物差しは一つで、ビューの一行が元の表の一行と一対一に対応しているかどうかを見ます。対応が一意に決まらない書き方は、はじめから更新できません。設問は、SQL 文中に現れる基底表は全て更新可能だと断っているので、判定は書き方だけで決まります。正解は、商品表から三つの列を選び、商品単価が一定額を超えるものだけに絞った SQL 文です。行を選び列を選んでいるだけなので、ビューの一行はそのまま商品表の一行に戻せますし、選ばれた列に商品番号が入っているため、どの行かを指すこともできます。逆に、複数の行を一つに押し込む書き方や重複を消す書き方が入ると、この対応が崩れます。
ほかの選択肢はなぜ違うのか
- イCREATE VIEW 受注商品(商品番…:受注表から商品番号の重複を取り除いて並べる文です。同じ商品番号の受注が何件あっても結果は一行にまとまるため、その一行を書き換えたときに元のどの受注を直すのかが定まりません。
- ウCREATE VIEW 商品受注(商品番…:商品番号ごとに受注数量を合計する文です。結果の一行が元の複数行の合計になっているので、合計値を別の数に変えても、その差を内訳へどう割り振るかを決めることができません。
- エCREATE VIEW 商品平均受注数量…:受注数量の平均を一つだけ求める文で、表全体がまとめて一行に畳み込まれています。畳み込みの度合いはさらに強く、得られた一行から元の個々の行へたどり着く手掛かりが残りません。
出典:令和5年度 秋期 応用情報技術者試験 午前 問28
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)