DBデータベーススペシャリスト試験 午前Ⅱ
令和6年度秋期 データベーススペシャリスト 午前Ⅱ 問8
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題

選択肢
- アEXCEPT
- イINTERSECT
- ウUNION
- エUNION ALL
解き方のヒントを見る
SQL条件と結果を対応づける視点
SQLの抽出問題では、条件の各部分がどの行を候補として扱う判断に関わるかを整理し、条件と結果の対応を一つずつ照合します。印象だけで結論を急がず、判定の単位を意識して考えましょう。
この問題で問われていること
確認の中心は、抽出条件を読んだときに想定する判定の単位と、結果として表示される行の対応です。条件の組合せと対象列が、結果の範囲にどう関係するかを切り分けて確認してください。
視点
抽出条件を構成要素に分け、対象となるデータの範囲、各条件の役割、条件同士の結び付き、結果表示に関係する指定を整理します。選択肢を先に決めず、条件と結果の対応を表にして確認すると、思い込みを抑えやすくなります。
確認ポイント
- 条件を構成する各部分が、どの対象を判定しているかを確認する
- 複数の条件がある場合、それぞれの関係を分けて整理する
- 条件から想定した対象範囲と、表示結果の対応を照合する
正解と解説を見る
正解
ア
解説
リーフノードは子を持たないノードなので、子ノード欄に現れる集合から、親として現れる集合を取り除いて求めます。図ではD、E、Gが該当します。
理由
子ノード欄にはA、B、C、D、E、F、Gが現れます。一方、親ノード欄に現れるのはA、B、C、Fです。親として現れるノードは子を持つ非リーフノードなので、子ノード集合からこの集合を除くと、リーフノードD、E、Gが残ります。
比較
SQL文の最初のSELECTは子ノード欄、二つ目のSELECTは親ノード欄を取得しています。必要なのは前者から後者を除く集合演算です。共通部分を求めたり、二つの集合を併合したりする演算では、子を持つノードを除外できません。
選択肢ア(正解)
これは正解だよ。最初のSELECTで得る子ノード集合から、二つ目のSELECTで得る親ノード集合を除外できます。親として現れるA、B、C、Fは子を持つ非リーフノードであり、残るD、E、Gがリーフノードになります。
選択肢イ
これは不正解だよ。二つのSELECTの結果の共通部分を求めるため、子ノード欄と親ノード欄の両方に現れるA、B、C、Fが得られます。これらは子を持つ非リーフノードであり、リーフノードではありません。
選択肢ウ
これは不正解だよ。二つのSELECTの結果を重複を除いて併合するため、子ノード集合と親ノード集合に含まれるノードが広く残ります。リーフだけでなく、子を持つA、B、C、Fも含まれるので条件に合いません。
選択肢エ
これは不正解だよ。二つのSELECTの結果を重複を残して併合する演算です。重複の扱いが異なるだけで、親ノードを除外する処理にはならず、リーフ以外のノードも結果に含まれてしまいます。
学習のポイント
隣接リストを集合として読み、列の役割と集合演算を対応付ける。
出典:独立行政法人 情報処理推進機構(IPA)令和6年度秋期 データベーススペシャリスト試験 午前Ⅱ 問8(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針