令和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 文]」というキャプションと、その下のSQLコードのブロック。

(SELECT 仕入先コード FROM 商品)
EXCEPT
(SELECT 仕入先コード FROM 当月商品仕入合計)
解答・解説

正解: エ. | 仕入先コード |
| --- |
| K02 |
| K04 |

提示されたSQL文で使用されている EXCEPT は、2つの SELECT 文の結果の 差集合 を求める演算子です。最初の SELECT 文の結果から、2番目の SELECT 文の結果にも含まれる行を除外し、さらに重複する行を排除した結果を返します。

具体的な処理手順は以下の通りです。

  1. 最初の SELECT 文の結果
    SELECT 仕入先コード FROM 商品 を実行すると、「商品」表から「仕入先コード」が抽出されます。
    重複を除いた値の集合は {K01, K02, K03, K04} となります。

  2. 2番目の SELECT 文の結果
    SELECT 仕入先コード FROM 当月商品仕入合計 を実行すると、「当月商品仕入合計」表から「仕入先コード」が抽出されます。
    値の集合は {K01, K03, K05} となります。

  3. EXCEPT 演算による差集合の取得
    最初の集合 {K01, K02, K03, K04} から、2番目の集合 {K01, K03, K05} にも存在する要素(K01 と K03)を除外します。
    その結果、残る要素は {K02, K04} となります。

得られる結果の表と一致するのは「エ」です。

各選択肢の解説

  • ア: 両方の表に共通して存在する要素を抽出したような内容で、さらに重複行が含まれているため誤りです。
  • イ: 両方の表に共通して存在する要素を求める演算(INTERSECT)の結果となっており、誤りです。
  • ウ: 残る要素は合っていますが、重複行が排除されていません。標準SQLの EXCEPT 演算では結果の重複行は一つにまとめられるため、誤りです。

Spineチーム