平成25年度 秋期 午前 問31
データベース
関係代数式
地域別に分かれている同じ構造の三つの商品表,“東京商品”,“名古屋商品”,“大阪商品”がある。次の SQL 文と同等の結果が得られる関係代数式はどれか。ここで,三つの商品表の主キーは“商品番号”である。
SELECT * FROM 大阪商品
WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 東京商品)
UNION
SELECT * FROM 名古屋商品
WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 東京商品)- ア(大阪商品 ∩ 名古屋商品) − 東京商品
- イ(大阪商品 ∪ 名古屋商品) − 東京商品
- ウ東京商品 −(大阪商品 ∩ 名古屋商品)
- エ東京商品 −(大阪商品 ∪ 名古屋商品)
答えと解説を見る
✓ これが正解イ(大阪商品 ∪ 名古屋商品) − 東京商品
解説
大阪と名古屋を合わせてから、東京を引く形になります。
設問は、示された SQL 文と同等の結果が得られる関係代数式を選ばせています。見る軸は二つで、どの表から行を取り出しているかと、どの表を引いているかです。取り出しの対象は大阪商品と名古屋商品の二つで、東京商品からは一行も取り出していません。したがって東京商品は引かれる側に立ちます。それぞれの取り出しには、商品番号が東京商品に含まれないという条件が NOT IN で付いており、これが東京商品を引く操作にあたります。二つの結果を重ねて重複を一つにまとめるのが UNION です。大阪商品から東京商品を引いたものと、名古屋商品から東京商品を引いたものを合わせた形は、先に大阪商品と名古屋商品を合わせてから東京商品を引いた形と同じになります。東京を1と2、大阪を1と3、名古屋を2と4として確かめると、どちらの手順でも3と4が残ります。
ほかの選択肢はなぜ違うのか
- ア(大阪商品 ∩ 名古屋商品) − 東京商…:両方に載っている商品だけを残してから引く形になり、片方にしかない商品が消えてしまいます。示された文には、二つの表に共通することを求める条件がどこにもありません。
- ウ東京商品 −(大阪商品 ∩ 名古屋商品):東京商品を左に置くと、結果として返るのは東京商品の行になります。取り出す表そのものが入れ替わっており、しかも両方に共通する商品だけを引く形にもなっています。
- エ東京商品 −(大阪商品 ∪ 名古屋商品):こちらも東京商品を左に置いているので、返るのは東京商品の行です。示された文が返すのは大阪商品と名古屋商品の行ですから、取り出す対象の時点で食い違います。
出典:平成25年度 秋期 応用情報技術者試験 午前 問31
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)