令和7年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問9
テクノロジ/データベース“名簿1”表と“名簿2”表のそれぞれ対応する行が全て等しいかどうかを確認する SQL 文の a,b,c に入れる適切な字句はどれか。 名簿1 名前|住所|性別|年齢 試験 太郎|東京|男|22 情報 花子|大阪|女|24 処理 一郎|京都|男|35 名簿2 名前|住所|性別|年齢 試験 太郎|東京|男|22 情報 花子|大阪|女|24 処理 一郎|京都|男|35 〔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年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問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
正解:エ
解説
UNIONは二つの表の行を重複除去して合わせた集合,INTERSECTは両方に共通する行の集合,EXCEPTは前者から後者を除いた集合をそれぞれ返します。(名簿1 UNION 名簿2)は両表を合わせた行の集合,(名簿1 INTERSECT 名簿2)は両方に共通する行の集合であり,前者から後者をEXCEPTで取り除くと,どちらか一方の表にしか存在しない(対応しない)行だけが残ります。この結果の行数が0であれば,名簿1と名簿2の対応する行が全て一致していることになります。
選択肢ごとの解説
- ア誤り。aをEXCEPTにすると名簿1にしかない行の集合になり,これとbのUNION ALL,cのINTERSECTを組み合わせても,両表の食い違いを漏れなく検出する式にはなりません。
- イ誤り。aをEXCEPTにすると名簿1にしかない行の集合になり,bのUNIONやcのINTERSECTと組み合わせても,両表の不一致行を正しく抽出する式にはなりません。
- ウ誤り。aのUNION ALLは重複も含めて単純に行を合算するだけであり,bのINTERSECTやcのUNIONと組み合わせても,両表の対応関係の一致・不一致を正しく判定する式にはなりません。
- エ正しい。(名簿1 UNION 名簿2)から(名簿1 INTERSECT 名簿2)をEXCEPTで取り除くと,どちらか一方にしか存在しない行だけが残ります。これが0件であれば,両表の対応する行が全て等しいと判定できます。