基本情報技術者 2012年 秋期 午前(科目A) 問29
問題文
“商品”表のデータが次の状態のとき、〔ビュー定義〕で示すビュー“収益商品”の行数が減少する更新処理はどれか。

選択肢
ア:商品コードがS001の売値を130,000に更新する。(正解)
イ:商品コードがS003の仕入値を150,000に更新する。
ウ:商品コードがS005の売値を130,000に更新する。
エ:商品コードがS005の仕入値を90,000に更新する。
##: “収益商品”ビューの行数が減少する更新処理はどれか【午前2 解説】
要点まとめ
- 結論:ア の更新(S001の売値を130,000にする)で売値−仕入値が50,000→30,000になりビューの行が減少します。
- 根拠:ビュー定義は売値−仕入値 >= 40000 なので、更新により条件を満たさなくなる行はビューから除外されます。
- 差がつくポイント:境界値(>=40000)の扱いと「元々ビューに含まれる行のみ削除され得る」点を素早く判定すること。
正解の理由
正解は ア です。
ビュー「収益商品」は WHERE 売値 - 仕入値 >= 40000 の条件で抽出します。元のデータでは S001 と S005 がこの条件を満たしており(それぞれ50,000 と 60,000)、ビュー行数は2です。アの更新で S001 の売値を 150,000 → 130,000 にすると差額が となり条件を満たさなくなるためビューから除外され、行数が減少します。
ビュー「収益商品」は WHERE 売値 - 仕入値 >= 40000 の条件で抽出します。元のデータでは S001 と S005 がこの条件を満たしており(それぞれ50,000 と 60,000)、ビュー行数は2です。アの更新で S001 の売値を 150,000 → 130,000 にすると差額が となり条件を満たさなくなるためビューから除外され、行数が減少します。
よくある誤解
- 「差が小さくなれば必ず行数が減る」と考える誤り:差が 40,000 以上を維持すればビューには残ります。
- 「更新はどの行でも減らせる」と思う誤り:ビューから除外されるのは元々ビューに含まれていた行のみです。元々含まれていない行を更新すると行数が増えることがあります。
- 境界値の判定ミス:条件が >= 40,000 か > 40,000 かで判定が変わるので注意が必要です。
解法ステップ
- ビュー条件を確認する(売値 − 仕入値 >= 40,000)。
- 各商品の現在の差額を計算する:S001=50,000、S003=30,000、S005=60,000。
- 選択肢ごとの更新後の差額を計算し、条件を満たすかどうかを確認する。
- 条件を満たさなくなる(ビューから除外される)更新を選ぶ。
選択肢別の誤答解説
- ア: ア(正解)
- S001 の売値を 150,000 → 130,000 にすると差額は 50,000 → 30,000 となり、条件(>=40,000)を満たさなくなりビューから除外されます。結果、ビューの行数は減少します。
- イ: 商品コード S003 の仕入値を 170,000 → 150,000 にすると差額は 30,000 → 50,000 となり、新たに条件を満たすためビューに追加され、行数は増加します(減少しない)。
- ウ: S005 の売値を 140,000 → 130,000 にすると差額は 60,000 → 50,000 となり、依然として >=40,000 のためビューに残ります。行数は変わりません。
- エ: S005 の仕入値を 80,000 → 90,000 にすると差額は 60,000 → 50,000 となり、これも >=40,000 のためビューに残り、行数は変わりません。
補足コラム
- ビューは基になる表の現在の値に基づいて動的に行を返します。したがって基表の更新で行の追加・削除・維持が起こります。
- 境界条件(>= 40000)の場合、ちょうど 40,000 になってもビューに含まれる点を必ず確認してください。
- 実務では ALTER VIEW で条件を変える方法、あるいはマテリアライズドビュー(集計結果を保持するタイプ)に注意が必要です。
例:該当更新の SQL(参考)
-- 正解の更新例(S001の売値を130000にする) UPDATE 商品 SET 売値 = 130000 WHERE 商品コード = 'S001';
FAQ
Q1: もし更新後の差がちょうど 40,000 だったら?
A1: WHERE が >= 40000 なので、差が 40,000 の行はビューに残ります(除外されません)。
A1: WHERE が >= 40000 なので、差が 40,000 の行はビューに残ります(除外されません)。
Q2: ビューがマテリアライズされていると影響は変わりますか?
A2: マテリアライズドビューは基表の更新があっても再構築・リフレッシュするまで反映されないため、即時に行数が変わらない場合があります。
A2: マテリアライズドビューは基表の更新があっても再構築・リフレッシュするまで反映されないため、即時に行数が変わらない場合があります。
Q3: 基表に新しい行を追加した場合はどうなる?
A3: 追加された行の差額が条件を満たせばビューに新規に含まれるので、行数は増加します。
A3: 追加された行の差額が条件を満たせばビューに新規に含まれるので、行数は増加します。
関連キーワード: SQL、ビュー、CREATE VIEW、SELECT、WHERE、UPDATE、売値、仕入値、差額、境界値、レコード、演算子

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

