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

選択肢
- アa:EXCEPT,b:UNION ALL,c:INTERSECT
- イa:EXCEPT,b:UNION,c:INTERSECT
- ウa:UNION ALL,b:INTERSECT,c:UNION
- エa:UNION,b:EXCEPT,c:INTERSECT
解き方のヒントを見る
抽出条件と結果を照合する視点
SQLの抽出問題では、条件の読み取りと、条件を満たす行が結果にどう反映されるかを切り分けて確認します。比較対象、対象範囲、結合や重複の扱いに注目し、結果表との対応を考えます。
この問題で問われていること
一つの観点として、抽出条件がどの行を対象にしているかを丁寧に追い、条件以外の列表示や並び順と混同せず、結果に現れる行の集合との対応だけを確認してください。
視点
条件が評価される対象と、最終結果として表示される情報を分けて整理します。列の値、行の組合せ、重複、並び順などを別々に捉え、設問が尋ねる対応関係に必要な部分を見比べます。
確認ポイント
- 比較対象となる列や値の範囲を確認する
- 条件の適用対象となる行のまとまりを確認する
- 表示列・重複・並び順を条件判定と分けて確認する
正解と解説を見る
正解
エ
解説
正答はエ。aにUNION、bにEXCEPT、cにINTERSECTを入れると、名簿1と名簿2の和集合から共通部分を差し引く式になり、両名簿の相違する行だけを取り出せる。相違がなければ結果は空集合となる。
理由
正しい式は、(名簿1 UNION 名簿2) EXCEPT (名簿1 INTERSECT 名簿2) です。前半で両名簿の全行をまとめ、後半で両方に存在する行を求め、それを前半から除く。したがって残るのは一方にしかない行であり、対応する行が全て等しい場合はCOUNT(*)が0になる。
比較
UNION ALLは重複を残すため、この比較で必要な相違行だけを表す構造にならない。正答の式では、cのINTERSECTが名簿1と名簿2の共通部分を求め、bのEXCEPTがaの結果からその共通部分を除く。評価構造をこの順に読むことが重要です。
選択肢ア
これは不正解だよ。aがEXCEPTになると、最初の結果は名簿1にだけある行となる。bのUNION ALLで共通部分を加える構造になるため、名簿が同一でも共通部分が結果に残り、COUNT(*)が0にならない。
選択肢イ
これは不正解だよ。aがEXCEPTのため、最初に名簿1だけの行を求めてしまう。bをUNIONにして重複を除いても、cで求めた共通部分を加える構造は変わらず、同一の名簿を比較した結果が空集合にならない。
選択肢ウ
これは不正解だよ。aがUNION ALLなので、二つの名簿の行を重複を残したまままとめる。そこへcのUNIONで作る全体集合とのINTERSECTを適用しても、両名簿が同じ場合に結果は空集合にならず、等しいことをCOUNT(*)=0で判定できない。
選択肢エ(正解)
これは正解だよ。aのUNIONで二つの名簿の全体をまとめ、cのINTERSECTで共通部分を求め、bのEXCEPTで共通部分を全体から除く。残るのは一方にだけある行なので、全行が等しい場合は空集合となりCOUNT(*)が0になる。
学習のポイント
集合演算を、SQL文の括弧と評価順に沿って分解して読む。
出典:独立行政法人 情報処理推進機構(IPA)令和7年度秋期 データベーススペシャリスト試験 午前Ⅱ 問9(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針