戦国IT

情報処理技術者試験の過去問対策サイト

データベーススペシャリスト試験 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
です。
共通するのは
K01
K03
なので、差集合は
K02
K04
となり、重複なしで表示されるため選択肢エが正解です。

よくある誤解

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

解法ステップ

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

選択肢別の誤答解説

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

補足コラム

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

FAQ

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

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

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