データベーススペシャリスト試験 2021年 午前206


“商品”表と“当月商品仕入合計”表に対してSQL文を実行した結果はどれか。
問題画像選択肢画像
(正解)

解説

“商品”表と“当月商品仕入合計”表に対してSQL文を実行した結果はどれか。【午前2 解説】

要点まとめ

  • 結論:SQLのEXCEPTは左側の結果から右側の結果を除外し、重複を排除した差集合を返します。
  • 根拠:商品表の仕入先コードはK01, K02, K03, K04、当月商品仕入合計表はK01, K03, K05であり、差集合はK02とK04です。
  • 差がつくポイント:EXCEPTは重複を排除するため、同じ値が複数あっても1回だけ表示される点を理解しましょう。

正解の理由

SQL文は
(SELECT 仕入先コード FROM 商品)  
EXCEPT  
(SELECT 仕入先コード FROM 当月商品仕入合計)
です。
これは「商品表にある仕入先コードのうち、当月商品仕入合計表に存在しないもの」を抽出します。
商品表の仕入先コードはK01, K02, K03, K04、当月商品仕入合計表はK01, K03, K05です。
共通するのはK01K03なので、差集合はK02K04となり、重複なしで表示されるため選択肢エが正解です。

よくある誤解

EXCEPTは単純に差を取るだけでなく、結果の重複を排除するため、重複した値が複数回表示されることはありません。

解法ステップ

  1. 商品表から仕入先コードを抽出する(K01, K02, K03, K04)。
  2. 当月商品仕入合計表から仕入先コードを抽出する(K01, K03, K05)。
  3. 左の集合から右の集合にあるコードを除外する。
  4. 重複を排除し、残ったコードを結果として返す。
  5. 結果はK02K04の2つだけになる。

選択肢別の誤答解説

  • ア:K01K03が含まれているが、これは両方の表に存在するため差集合には含まれません。
  • イ:K01K03のみで、これは共通部分であり差集合ではありません。
  • ウ:K02K04が重複しているが、EXCEPTは重複を排除するため誤りです。
  • エ:K02K04が1回ずつ表示されており、正しい差集合を表しています。

補足コラム

SQLのEXCEPTは集合演算の一つで、左側のクエリ結果から右側のクエリ結果を差し引きます。
UNIONINTERSECTと同様に重複を排除するため、結果セットは常にユニークな値になります。
また、EXCEPT ALLをサポートするDBMSでは重複を考慮した差集合も可能ですが、標準SQLではEXCEPTが一般的です。

FAQ

Q: EXCEPTNOT INの違いは何ですか?
A: EXCEPTは2つの結果セットの差集合を返し、重複を排除します。NOT INは特定の値を除外する条件式で、重複の扱いは異なります。
Q: EXCEPTはすべてのDBMSで使えますか?
A: 多くのDBMSでサポートされていますが、MySQLなど一部ではサポートされていないため、代替としてLEFT JOINNOT EXISTSを使うことがあります。

関連キーワード: SQL, EXCEPT, 差集合, 重複排除, 集合演算, 仕入先コード, データベースクエリ
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ