SkillStack
テクノロジ系9 / 25問

データベーススペシャリスト試験 令和7年度 秋期 午前II 問9

"名簿1"表と"名簿2"表のそれぞれ対応する行が全て等しいかどうかを確認するSQL文のa、b、cに入れる適切な字句はどれか。

〔SQL文〕  SELECT CASE WHEN COUNT(*) = 0 THEN ’等しい’ ELSE ’異なる’ END AS 結果   FROM ((SELECT * FROM 名簿1 「a」 SELECT * FROM 名簿2)     「b」     (SELECT * FROM 名簿1 「c」 SELECT * FROM 名簿2)   ) COMPARE

データベーススペシャリスト試験 令和7年度 秋期 午前II 問9の図表

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】エ

二つの表が集合として等しいためには、両方に含まれる行の集合と、少なくとも一方に含まれる行の集合が一致しなければなりません。エを当てはめると、前半は「名簿1 UNION 名簿2」で両表の和集合、後半は「名簿1 INTERSECT 名簿2」で両表の共通部分となり、全体で「和集合 EXCEPT 共通部分」を求めます。両表が等しければ、画像のように和集合と共通部分はいずれも同じ3行なので、差集合は0行となり、「等しい」と表示されます。片方だけに存在する行があれば差集合に残り、COUNT(*)が0でなくなるため、「異なる」と表示されます。

アは誤りです。「名簿1 EXCEPT 名簿2」に共通部分をUNION ALLで加えるので、表が等しい場合でも共通する3行が残り、異なると判定されます。

イは誤りです。UNION ALLをUNIONに替えても、共通部分の行が結果に残る点は同じであり、等しい表を正しく判定できません。

ウは誤りです。「名簿1 UNION ALL 名簿2」と和集合とのINTERSECTになり、両表が等しい場合でも共通する行が結果に残ります。

【ポイント】 UNIONは和集合、INTERSECTは共通部分、EXCEPTは左側にだけある行を求める差集合です。二つの集合の相違は「和集合-共通部分」という対称差で検出できます。これらの集合演算は、ALLを付けない限り重複行を除去します。

出典:令和7年度 秋期 データベーススペシャリスト試験 午前II 問9
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の25問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める