平成28年度 秋期 午前 問28
データベース
直積に関する問題
関係代数の演算のうち,関係 R,S の直積(R×S)に対応する SELECT 文はどれか。ここで,関係 R,S を表 R,S に対応させ,表 R 及び S にそれぞれ行の重複はないものとする。
- ア`SELECT * FROM R, S`
- イ`SELECT * FROM R EXCEPT SELECT * FROM S`
- ウ`SELECT * FROM R UNION SELECT * FROM S`
- エ`SELECT * FROM R INTERSECT SELECT * FROM S`
答えと解説を見る
✓ これが正解ア`SELECT * FROM R, S`
解説
二つの表をカンマで並べると全組合せが出ます。
直積は、二つの関係の行をすべて総当たりで組み合わせる演算です。片方がm行、もう片方がn行なら、結果はm×n行になり、列は両方の列を横につないだものになります。SQLでは、FROM句に表をカンマで区切って並べると、絞り込む条件を付けない限りこの総当たりが起こります。だから、FROM句に二つの表を並べただけの文が直積にあたりました。見分けの軸になるのは、結果がどちらの向きに伸びるかです。直積では列が増えて行数が掛け算になりますが、縦方向の集合演算では列の構成は元のまま変わらず、行数も掛け算にはなりません。残る三つは、いずれもこの縦方向の演算にあたります。一つは片方から他方に含まれる行を差し引いたもの、一つは両方を足し合わせて一つにまとめたもの、もう一つは両方に共通する行だけを残したものでした。三つとも列は増えず、行数も元の表の行数を掛け合わせた大きさにはなりません。
ほかの選択肢はなぜ違うのか
- イ`SELECT * FROM R EXC…:EXCEPTは、前の問合せの結果から、後ろの問合せの結果に含まれる行を取り除く書き方です。得られるのは差にあたる行の集まりで、列の並びは元のままでした。行数が掛け算になり列も横に伸びる演算とは、結果の形が違います。
- ウ`SELECT * FROM R UNI…:UNIONは、二つの問合せの結果を縦につなげて一つにまとめる書き方です。重複を取り除いた和が得られますが、列は増えず、行数もm×nにはなりません。すべての行を総当たりで組み合わせる演算ではありませんでした。
- エ`SELECT * FROM R INT…:INTERSECTは、二つの問合せの結果に共通して現れる行だけを残す書き方です。結果の行数は元のどちらの行数も超えません。行を掛け合わせて増やす向きとは逆で、列の構成も元の表のまま変わりませんでした。
出典:平成28年度 秋期 基本情報技術者試験 午前 問28
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)