ホーム > データベーススペシャリスト試験 > 2021年
データベーススペシャリスト試験 2021年 午前2 問06
“商品”表と“当月商品仕入合計”表に対して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
は単純に差を取るだけでなく、結果の重複を排除するため、重複した値が複数回表示されることはありません。解法ステップ
- 商品表から仕入先コードを抽出する(
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:
A:
EXCEPT
とNOT IN
の違いは何ですか?A:
EXCEPT
は2つの結果セットの差集合を返し、重複を排除します。NOT IN
は特定の値を除外する条件式で、重複の扱いは異なります。Q:
A: 多くのDBMSでサポートされていますが、MySQLなど一部ではサポートされていないため、代替として
EXCEPT
はすべてのDBMSで使えますか?A: 多くのDBMSでサポートされていますが、MySQLなど一部ではサポートされていないため、代替として
LEFT JOIN
やNOT EXISTS
を使うことがあります。関連キーワード: SQL, EXCEPT, 差集合, 重複排除, 集合演算, 仕入先コード, データベースクエリ