平成23年度 特別 午前Ⅱ 問7
データ操作
関係代数式
地域別に分かれている同じ構造の三つの商品表,“東京商品”,“名古屋商品”,“大阪商品”がある。次の SQL 文と同等の結果が得られる関係代数式はどれか。ここで,三つの商品表の主キーは“商品番号”である。また,X−Y は X から Y の要素を除いた差集合を表す。
SELECT * FROM 大阪商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 東京商品) UNION SELECT * FROM 名古屋商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 東京商品)
- ア(大阪商品 ∩ 名古屋商品) − 東京商品
- イ(大阪商品 ∪ 名古屋商品) − 東京商品
- ウ東京商品 − (大阪商品 ∩ 名古屋商品)
- エ東京商品 − (大阪商品 ∪ 名古屋商品)
答えと解説を見る
✓ これが正解イ(大阪商品 ∪ 名古屋商品) − 東京商品
解説
東京に無い大阪と名古屋の商品を合わせるので、和から東京を引きます。
SQL 文は二つの SELECT を UNION で合わせています。前半は大阪商品のうち東京商品に無い商品番号の行、後半は名古屋商品のうち東京商品に無い行です。関係代数で書くと (大阪商品−東京商品)∪(名古屋商品−東京商品) で、どちらからも同じ東京商品を引いているので、先に和をとってから引いても同じ集合になります。したがって (大阪商品∪名古屋商品)−東京商品 と同等です。三つの表は同じ構造なので、和や差がそのまま使えます。共通の相手を引く差は和の外にくくり出せる、と覚えておくと、式の形から素早く対応がつけられます。
ほかの選択肢はなぜ違うのか
- ア(大阪商品 ∩ 名古屋商品) − 東京商…:大阪商品と名古屋商品の共通部分をとると、両方にある商品しか残りません。UNION はどちらか一方にある行を集めるので、片方にしか無い商品が抜け落ちてしまいます。
- ウ東京商品 − (大阪商品 ∩ 名古屋商品…:東京商品から引いているので、東京にある商品が結果になります。SQL 文は大阪と名古屋の表から行を取り出しており、引く向きが逆で、共通部分をとる点でも合いません。
- エ東京商品 − (大阪商品 ∪ 名古屋商品…:引く向きが逆で、東京商品のうち大阪にも名古屋にも無い商品が結果になります。SQL 文の結果は大阪か名古屋にある商品なので、取り出す元の表が違っています。
出典:平成23年度 特別 データベーススペシャリスト試験 午前Ⅱ 問7
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)