解説
“商品”表と“当月商品仕入合計”表に対して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
は単純に差を取るだけでなく、結果の重複を排除するため、重複した値が複数回表示されることはありません。
解法ステップ
- 商品表から仕入先コードを抽出する(
K01, K02, K03, K04
)。
- 当月商品仕入合計表から仕入先コードを抽出する(
K01, K03, K05
)。
- 左の集合から右の集合にあるコードを除外する。
- 重複を排除し、残ったコードを結果として返す。
- 結果は
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, 差集合, 重複排除, 集合演算, 仕入先コード, データベースクエリ