DBデータベーススペシャリスト試験 午前Ⅱ
平成27年度春期 データベーススペシャリスト 午前Ⅱ 問11
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題
選択肢
- アobs1.通番 = obs1.通番
- イobs1.通番 = obs2.通番
- ウobs1.通番 = obs3.通番
- エobs2.通番 = obs3.通番
解き方のヒントを見る
抽出条件と対象行の対応を確認
SQLの抽出条件を読むときは、条件がどの列の値に関係し、各行を残すかどうかを判断する材料としてどう働くかに注目しましょう。条件同士の関係も整理します。ただし、結果を先に決めつけず、処理の流れを丁寧に追います。
この問題で問われていること
確認の中心は、抽出条件を構成する各要素と、表の各行が持つ値との対応です。条件がどの行の判定に影響するか、複数条件がある場合に判定全体へどう関わるかを整理してください。
視点
抽出結果を考える際は、まず条件が参照する情報の種類を分け、次に行ごとに判定材料との対応を見ます。複数の条件は、単独で見た場合と組み合わせた場合を区別して整理すると、読み違いを減らせます。
確認ポイント
- 条件が参照する列と各行の値の対応を確認する
- 条件ごとの判定対象を混同していないか確認する
- 複数条件を組み合わせた際の関係を整理する
正解と解説を見る
正解
ウ
解説
一度でも観測された鳥について、観測のない通番にも観測数0の行を追加するには、候補となる通番と鳥名の組合せが既存表にない場合だけ挿入します。その判定には候補通番と内側の既存行の通番を対応付ける条件が必要です。
理由
obs1は観測タイミング、obs2は鳥名の候補、obs3は既存の観測行を表します。obs2の鳥名に対し、obs1の通番に該当するobs3が存在しないとき、観測数0の行を追加します。したがって、通番による対応付けが必要です。
AVGとの関係
鳥名ごとの平均値に、観測されなかったタイミングも含めるには、該当する通番・鳥名の行を0で補います。NOT EXISTSは、その組合せがまだ存在しない場合だけ挿入するために使われています。
選択肢ア
これは不正解だよ。obs1.通番 = obs1.通番は、同じ表別名の同じ列同士を比較しているため、通番の値に関係なく常に成立します。その結果、obs3がどの観測タイミングの行かを候補の通番に対応付けられず、必要な0の行だけを正しく判定できません。
選択肢イ
これは不正解だよ。obs1.通番 = obs2.通番は、外側の二つの行について通番を一致させる条件です。しかし、NOT EXISTS内で既存行を表すobs3との対応付けがなく、obs3の通番を候補の観測タイミングと比較できません。
選択肢ウ(正解)
これは正解だよ。obs1.通番 = obs3.通番により、候補となる観測タイミングと、既存行obs3の同じ通番を対応付けられます。さらに鳥名もobs2.鳥名 = obs3.鳥名で一致させるため、その通番・鳥名の行がない場合だけ観測数0を挿入できます。
選択肢エ
これは不正解だよ。obs2.通番 = obs3.通番では、鳥名候補を作るobs2の通番と既存行obs3の通番を比較します。obs2は候補となる鳥名を得る役割ですが、必要なのは観測タイミングを表すobs1との対応であり、候補通番の判定対象を取り違えています。
学習のポイント
相関サブクエリで外側の候補行と内側の既存行を対応付ける方法を学ぶ。
出典:独立行政法人 情報処理推進機構(IPA)平成27年度春期 データベーススペシャリスト試験 午前Ⅱ 問11(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針