データベーススペシャリスト試験 令和3年度 秋期 午前II 問6
"商品"表と"当月商品仕入合計"表に対して、SQL文を実行した結果はどれか。
〔SQL文〕 (SELECT 仕入先コード FROM 商品) EXCEPT (SELECT 仕入先コード FROM 当月商品仕入合計)

選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】エ
EXCEPTは、左側の問合せ結果に存在し、右側の問合せ結果には存在しない行を求める集合演算です。また、EXCEPT ALLではない通常のEXCEPTでは、同じ値が複数あっても重複が取り除かれます。
左側の「商品」表から取り出される仕入先コードは、K01、K01、K02、K02、K03、K04です。これを集合として考えると、{K01、K02、K03、K04}となります。右側の「当月商品仕入合計」表の仕入先コードは、{K01、K03、K05}です。左側から右側にも存在するK01とK03を除くと、K02とK04が残ります。したがって、これらを重複なく表示するエが正解です。なお、ORDER BYがないので表示順序自体は保証されません。
アのK01、K01、K03は誤りです。これは、商品表の各行について当月の仕入れがあるかを調べ、元の重複を残した場合などの結果です。
イのK01、K03は誤りです。これは両方の表に存在する値を求めるINTERSECT、すなわち積集合の結果です。
ウのK02、K02、K04は誤りです。これは右側に存在しない商品表の行を抽出し、商品表にあるK02の重複をそのまま残した結果です。通常のEXCEPTでは重複は除かれます。
【ポイント】 UNION、INTERSECT、EXCEPTは、通常は重複行を除いて集合として処理します。 重複を残す集合演算にはALLを付けます。集合演算の結果の順序が必要な場合は、ORDER BYを指定します。
出典:令和3年度 秋期 データベーススペシャリスト試験 午前II 問6
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の25問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる