平成23年度 秋期 午前 問30
データベース
ビューを作成する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
解説
元の一行を指せるビューだけ更新できます。
ビューを更新するというのは見かけのうえでの言い方で、実体としては元になっている実表を書き換えることです。ですから判定の基準は一つに定まります。ビューの一行が、元の実表のどの一行に対応するのかを一意に指せるかどうかです。指せるなら、どの行をどう直せばよいかが決まります。指せないなら、直す先が決まらないので、そもそも書き換えようがありません。この目で四つの問合せを見比べると、行の対応を崩す仕掛けがいくつかあることに気づきます。複数の行を一つに束ねてしまうもの、重なりを取り除いて一つに畳んでしまうもの、表全体を一行に縮めてしまうものです。いずれも、できあがった一行の裏に元の行が何本も隠れることになるので、対応が一対一ではなくなります。逆に、条件で行を絞り込み、必要な列を選び出すだけであれば、行の対応は崩れません。この場合は書き換えられます。なお、列を選び出すときに、行を見分けるための列まで落としてしまうと、やはり元の行を特定できなくなるので、その点にも注意が必要です。四つのうち、行の対応が保たれているものを探すのが解き方になります。
ほかの選択肢はなぜ違うのか
- イCREATE VIEW 受注商品(商品番…:重なりを取り除く指定が入っています。同じ値の行が一つに畳まれてしまうため、できあがった一行を書き換えようとしても、元の何行を直せばよいのかが決まりません。
- ウCREATE VIEW 商品受注(商品番…:受注数量を合計し、商品番号ごとに束ねています。合計の値を別の数に直せと言われても、束ねられた元の行それぞれをいくつにすべきかは一通りに決まりません。
- エCREATE VIEW 商品平均受注数量…:受注数量の平均を求めており、表全体が一行に縮んでいます。束ねる単位の指定が無くても、集計している時点で元の行との一対一の対応はすでに失われています。
出典:平成23年度 秋期 応用情報技術者試験 午前 問30
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)