戦国IT - 情報処理技術者試験の過去問対策サイト
お知らせお問い合わせ料金プラン

データベーススペシャリスト 2011年 午前207


問題文

地域別に分かれている同じ構造の三つの商品表、“東京商品”、“名古屋商品”、“大阪商品”がある。次の SQL 文と同等の結果が得られる関係代数式はどれか。ここで、三つの商品表の主キーは“商品番号” である。また、X-Y は X からYの要素を除いた差集合を表す。
SELECT * FROM 大阪商品
  WHERE 商品番号 NOT IN(SELECT 商品番号 FROM 東京商品)
UNION
 
SELECT * FROM 名古屋商品
  WHERE 商品番号 NOT IN(SELECT 商品番号 FROM 東京商品)

選択肢

大阪商品 ∩ 名古屋商品) - 東京商品
(大阪商品 U 名古屋商品) - 東京商品(正解)
東京商品 - (大阪商品 ∩ 名古屋商品)
東京商品 - (大阪商品 U 名古屋商品)

地域別商品表のSQLと関係代数の同値式【午前2 解説】

要点まとめ

  • 結論:SQL文は「大阪商品と名古屋商品の和集合から東京商品にある商品を除く」操作であり、関係代数では
    (大阪商品 ∪ 名古屋商品) - 東京商品
    に相当します。
  • 根拠:SQLのNOT IN句は「対象に含まれないもの」を抽出し、UNIONは和集合を表すため、両者の和集合から東京商品を差し引く形になります。
  • 差がつくポイント:差集合の方向性と集合演算の意味を正確に理解し、和集合と積集合を混同しないことが重要です。

正解の理由

SQL文は「大阪商品にあって東京商品にない商品」と「名古屋商品にあって東京商品にない商品」をそれぞれ抽出し、その結果をUNIONで結合しています。
これは関係代数で表すと、まず大阪商品と名古屋商品の和集合を取り、そこから東京商品に含まれる商品を除く操作と同じです。
したがって、正解はイの
(大阪商品 ∪ 名古屋商品) - 東京商品
となります。

よくある誤解

差集合の順序を逆に考えたり、和集合ではなく積集合を使ってしまう誤りが多いです。
また、NOT INの意味を「含まれるもの」と誤解するケースもあります。

解法ステップ

  1. SQL文の内側のSELECT文「東京商品にある商品番号」を理解する。
  2. 外側のSELECT文で「大阪商品」「名古屋商品」から東京商品にない商品を抽出していることを確認。
  3. それぞれの結果をUNIONで結合しているので、和集合であることを把握。
  4. 関係代数で表現すると「大阪商品と名古屋商品の和集合から東京商品を差し引く」操作になる。
  5. 選択肢の中から
    (大阪商品 ∪ 名古屋商品) - 東京商品
    を選ぶ。

選択肢別の誤答解説

  • ア:
    (大阪商品 ∩ 名古屋商品) - 東京商品

    → 大阪商品と名古屋商品の共通部分のみを対象にしており、和集合とは異なる。
  • イ:
    (大阪商品 ∪ 名古屋商品) - 東京商品

    → 正解。和集合から東京商品を除く操作でSQL文と同等。
  • ウ:
    東京商品 - (大阪商品 ∩ 名古屋商品)

    → 東京商品から大阪・名古屋商品の共通部分を除いており、SQLの意味と逆。
  • エ:
    東京商品 - (大阪商品 ∪ 名古屋商品)

    → 東京商品から大阪・名古屋商品の和集合を除いており、SQLの意味と逆。

補足コラム

関係代数の基本演算には和集合(∪)、積集合(∩)、差集合(−)があり、SQLのUNIONは和集合、INTERSECTは積集合、EXCEPTは差集合に対応します。
NOT IN句は差集合の考え方と密接に関連しているため、集合演算の理解がSQLの理解にも役立ちます。

FAQ

Q: なぜNOT INは差集合と同じ意味になるのですか?
A: NOT INは「指定した集合に含まれない要素」を抽出するため、元の集合から指定集合を除く差集合の操作と同じ意味になります。
Q: UNIONとINTERSECTの違いは何ですか?
A: UNIONは複数の集合の要素をすべて含む和集合、INTERSECTは複数の集合に共通する要素のみを含む積集合です。

関連キーワード: 関係代数、差集合、和集合、SQL, NOT IN, UNION, 主キー、集合演算
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリスト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてプライバシーポリシー利用規約特商法表記開発者について