ホーム > データベーススペシャリスト試験 > 2011年
データベーススペシャリスト試験 2011年 午前2 問07
地域別に分かれている同じ構造の三つの商品表, “東京商品”, “名古屋商品”, “大阪商品”がある。次の SQL 文と同等の結果が得られる関係代数式はどれか。ここで, 三つの商品表の主キーは“商品番号” である。また, X-Y は X からYの要素を除いた差集合を表す。
SELECT * FROM 大阪商品
WHERE 商品番号 NOT IN(SELECT 商品番号 FROM 東京商品)
UNION
SELECT * FROM 名古屋商品
WHERE 商品番号 NOT IN(SELECT 商品番号 FROM 東京商品)
ア:大阪商品 ∩ 名古屋商品) - 東京商品
イ:(大阪商品 U 名古屋商品) - 東京商品(正解)
ウ:東京商品 - (大阪商品 ∩ 名古屋商品)
エ:東京商品 - (大阪商品 U 名古屋商品)
解説
# 問題の整理
- **3つのテーブル**: 「東京商品」「名古屋商品」「大阪商品」
- 各テーブルは同じ構造で、主キーは「商品番号」
- SQL文は以下の通り:
```sql
SELECT * FROM 大阪商品
WHERE 商品番号 NOT IN(SELECT 商品番号 FROM 東京商品)
UNION
SELECT * FROM 名古屋商品
WHERE 商品番号 NOT IN(SELECT 商品番号 FROM 東京商品)
SQL文の意味
- 大阪商品テーブルから、東京商品に存在しない商品番号の商品を抽出
- 名古屋商品テーブルから、東京商品に存在しない商品番号の商品を抽出
- 上記2つの結果の**和集合(UNION)**を取得
すなわち、
- 「東京商品にない商品」を、「大阪商品」と「名古屋商品」から取り出して合わせたもの
関係代数式の選択肢
- ア: (大阪商品 ∩ 名古屋商品) - 東京商品
→ 大阪と名古屋の共通部分から東京を除く - イ: (大阪商品 ∪ 名古屋商品) - 東京商品
→ 大阪と名古屋の和集合から東京を除く - ウ: 東京商品 - (大阪商品 ∩ 名古屋商品)
→ 東京から大阪と名古屋の共通部分を除く - エ: 東京商品 - (大阪商品 ∪ 名古屋商品)
→ 東京から大阪と名古屋の和集合を除く
正解: イ の理由
- UNION は和集合 (∪)
- 条件「商品番号 NOT IN (東京商品)」は東京商品から除く = 差集合 (- 東京商品)
- したがって、
という表現になります。
なぜ他の選択肢が不適切か
- ア: 大阪商品 ∩ 名古屋商品
→ 「大阪商品」と「名古屋商品」の両方に存在する商品のみ
→ 問題は両方にある必要はないので不適切 - ウ・エ: 東京商品から除く操作
→ 東京商品を基に差集合を計算しているが、問題のSQLは東京商品から「抽出」しているわけではなく、東京商品に存在しない大阪・名古屋商品を集めたいので成立しない
まとめ
よって、正解は イ: (大阪商品 ∪ 名古屋商品) - 東京商品 です。