DBデータベーススペシャリスト試験 午前Ⅱ

令和3年度秋期 データベーススペシャリスト 午前Ⅱ 問6

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

“商品”表と“当月商品仕入合計”表に対して,次のSQL文を実行した結果はどれか。 (SELECT 仕入先コード FROM 商品) EXCEPT (SELECT 仕入先コード FROM 当月商品仕入合計)
商品コードS001〜S006と仕入先コードを示す商品表,及び仕入先コードK01・K03・K05と仕入合計金額を示す当月商品仕入合計表。
商品コードS001〜S006と仕入先コードを示す商品表,及び仕入先コードK01・K03・K05と仕入合計金額を示す当月商品仕入合計表。

選択肢

  1. ア
    仕入先コード:K01,K01,K03
  2. イ
    仕入先コード:K01,K03
  3. ウ
    仕入先コード:K02,K02,K04
  4. エ
    仕入先コード:K02,K04
解き方のヒントを見る

抽出条件を読むときの確認視点

SQLの抽出結果を考えるときは、まず条件がどの対象を評価するものかに注目します。列や行の関係、条件同士の組み合わせを順に整理し、見た目の印象だけで判断しないようにします。

この問題で問われていること

この問題では、抽出条件を構成する各要素が、どの対象に対して評価され、ほかの条件とどのように関係するかを一つの観点として確認してください。画面上の候補を比べる際も、この観点だけを使って整理することが大切です。

視点

抽出条件を読む際は、条件ごとの評価対象と、条件同士を組み合わせたときの関係を整理します。まず個々の条件を分けて捉え、その後に全体の判定へ進むと、結果との対応を落ち着いて検討できます。

確認ポイント

  • 各条件が参照している対象を確認する
  • 条件同士の結び付き方を確認する
  • 判定の対象範囲が途中で変わっていないか確認する
正解と解説を見る

正解

エ

解説

EXCEPTは、左側のSELECT結果から右側のSELECT結果に含まれる値を除いた集合を返します。集合演算では同じ値の重複を一つにまとめて扱うため、商品表の仕入先コードを確認し、当月商品仕入合計表に存在するコードを除外します。その結果、K02とK04が残るので、エが正解です。

理由

商品表から得られる仕入先コードはK01、K01、K02、K02、K03、K04です。当月商品仕入合計表にはK01、K03、K05があります。EXCEPTは左側にあり右側にない値を求めるため、K01とK03を除外するとK02とK04が残ります。

比較

同じ仕入先コードが商品表に複数回現れていても、EXCEPTの結果では集合として扱われ、重複したK02を二つの行として返しません。また、右側だけに存在するK05は除外対象ではなく、左側の結果にも現れないため結果には含まれません。

選択肢ア

これは不正解だよ。K01とK03は商品表にも存在しますが、当月商品仕入合計表にも存在するため、EXCEPTの結果から除かれます。また、EXCEPTは重複行をそのまま残す演算ではないので、K01を二つ返すこの結果はSQLの集合演算と一致しません。

選択肢イ

これは不正解だよ。K01とK03は左側のSELECTに現れますが、右側のSELECTにも現れる仕入先コードです。したがって差集合の結果には残りません。この選択肢は、右側に存在するコードを除外する処理を反映できていない点が誤りです。

選択肢ウ

これは不正解だよ。K02とK04は商品表にあり、当月商品仕入合計表にはないため、対象となるコード自体は含まれます。しかしEXCEPTは同じ値の重複を一つにまとめるので、K02を二つ返すこの選択肢は結果の行数が誤っています。

選択肢エ(正解)

これは正解だよ。商品表の仕入先コードから、当月商品仕入合計表にもあるK01とK03を除くと、K02とK04が残ります。さらにEXCEPTでは重複値を一つにまとめるため、商品表でK02が二行あっても、結果はK02、K04の二つです。

学習のポイント

EXCEPTの集合差と、重複行を一つにまとめる性質を理解する。

出典:独立行政法人 情報処理推進機構(IPA)令和3年度秋期 データベーススペシャリスト試験 午前Ⅱ 問6(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針