SQL EXCEPT演算

正解の理由 SQLの `EXCEPT` 演算子は集合の差(差集合)を求める演算子であり、標準SQLでは `EXCEPT ALL` を指定しない限り、自動的に重複行が排除(DISTINCT)されます。 第1クエリ: `SELECT 仕入先コード FROM 商品` の結果は、商品表に存在する仕入先コードの集合です。重複を排除した集合は {'K01', 'K02', 'K03', 'K04'} となります。 第2クエリ: `SELECT 仕入先コード FROM 当月商品仕入合計` の結果は、{'K01', 'K03', 'K05'} です。 差集合演算: 第1クエリの結果から第2クエリの結果に含まれる要素を取り除きます。{'K01', 'K02', 'K03', 'K04'} から {'K01', 'K03', 'K05'} を除外すると、残る要素は {'K02', 'K04'} です。 したがって、結果として出力される表は仕入先コード `K02` と `K04` の2行となり、エが正解です。 各選択肢の解説 重複行が排除されておらず、かつ当月商品仕入合計に存在する K01 や K03 が残っているため誤りです。 両方の表に共通して存在する積集合(INTERSECT)のような結果になっており誤りです。 EXCEPT は重複を排除するため、K02 が2行重複して出力されることはありません。 正しい結果です。重複が排除され、K02 と K04 の2行が得られます。

“商品” 表と “当月商品仕入合計” 表に対して,SQL 文を実行した結果はどれか。

“商品” 表

商品コード

仕入先コード

S001

K01

S002

K01

S003

K02

S004

K02

S005

K03

S006

K04

“当月商品仕入合計” 表

仕入先コード

仕入合計金額

K01

150,000

K03

100,000

K05

250,000

〔SQL 文〕 (SELECT 仕入先コード FROM 商品) EXCEPT (SELECT 仕入先コード FROM 当月商品仕入合計)

仕入先コード

ア

K01, K01, K03

イ

K01, K03

ウ

K02, K02, K04

エ

K02, K04

出典2021r03a_db_am2_問6
選択肢画像が未設定です