令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問6
“商品”表と“当月商品仕入合計”表に対して,SQL文を実行した結果はどれか。

図の説明テキスト
「商品」というキャプションと、その下の罫線付きの表。
| 商品コード | 仕入先コード |
|---|---|
| S001 | K01 |
| S002 | K01 |
| S003 | K02 |
| S004 | K02 |
| S005 | K03 |
| S006 | K04 |

図の説明テキスト
「当月商品仕入合計」というキャプションと、その下の罫線付きの表。
| 仕入先コード | 仕入合計金額 |
|---|---|
| K01 | 150,000 |
| K03 | 100,000 |
| K05 | 250,000 |

図の説明テキスト
「[SQL 文]」というキャプションと、その下のSQLコードのブロック。
(SELECT 仕入先コード FROM 商品)
EXCEPT
(SELECT 仕入先コード FROM 当月商品仕入合計)
解答・解説
正解: エ. | 仕入先コード |
| --- |
| K02 |
| K04 |
提示されたSQL文で使用されている EXCEPT は、2つの SELECT 文の結果の 差集合 を求める演算子です。最初の SELECT 文の結果から、2番目の SELECT 文の結果にも含まれる行を除外し、さらに重複する行を排除した結果を返します。
具体的な処理手順は以下の通りです。
最初の
SELECT文の結果SELECT 仕入先コード FROM 商品を実行すると、「商品」表から「仕入先コード」が抽出されます。
重複を除いた値の集合は{K01, K02, K03, K04}となります。2番目の
SELECT文の結果SELECT 仕入先コード FROM 当月商品仕入合計を実行すると、「当月商品仕入合計」表から「仕入先コード」が抽出されます。
値の集合は{K01, K03, K05}となります。EXCEPT 演算による差集合の取得
最初の集合{K01, K02, K03, K04}から、2番目の集合{K01, K03, K05}にも存在する要素(K01とK03)を除外します。
その結果、残る要素は{K02, K04}となります。
得られる結果の表と一致するのは「エ」です。
各選択肢の解説
- ア: 両方の表に共通して存在する要素を抽出したような内容で、さらに重複行が含まれているため誤りです。
- イ: 両方の表に共通して存在する要素を求める演算(
INTERSECT)の結果となっており、誤りです。 - ウ: 残る要素は合っていますが、重複行が排除されていません。標準SQLの
EXCEPT演算では結果の重複行は一つにまとめられるため、誤りです。