応用情報技術者 2013年 秋期 午前2 問30
問題文
関係R と関係Sに対して、関係 X を求める関係演算はどれか。

選択肢
ア:IDで結合
イ:差
ウ:直積
エ:和(正解)
🔒 解説は解答すると表示されます
関係の和集合【午前2解説】
正解の理由
与えられた X は R と S に含まれるすべてのタプルを一つの表にまとめた結果であり、R と S に共通するタプルは一度だけ現れています(例: ID=0001 の (0001,a,100) は両方にあるが X では1件)。この振る舞いは集合論における和集合 と一致します。関係代数の和(集合和)は重複を排除する集合演算であるため、求める演算は エ(和)です。
補足として、SQL においても同様の区別があり、重複を排除するのが UNION、重複を残すのが UNION ALL である点を押さえてください。
解法ステップ
- スキーマ確認:R と S の属性(列)が一致しているか確認する(ID, A, B)。一致していなければ和は定義されない。
- 要素列挙:R と S の全タプルを並べる。
- 和集合適用:R と S の全タプルを合わせ、同一タプルは一度にする(重複排除)。
- X と比較:得られた集合が X のタプル集合と一致すれば「和」であると結論する。
選択肢別の誤答解説
-
ア: IDで結合
ID をキーに結合(等価結合)すると、R側とS側の行を組合わせた「結合結果」になり、通常は列が増えるか(R.A, S.A のように)、結合条件に応じた別のタプル構成になります。与えられた X のようにRとSのタプルを単に積み重ねた形(同一列構造で重複は一回)にはならないため誤りです。 -
イ: 差
差(たとえば R − S)は「R にあって S にないタプル」を返します。R − S を計算すると (0002,b,200) と (0003,d,300) だけになるはずで、X に含まれる (0002,a,200) などは説明できません。従って差ではありません。 -
ウ: 直積
直積(Cartesian product)は R の各行と S の各行をすべて組合せ、行数が |R|×|S| になります。スキーマも通常は両方の属性を併せ持つ形になり、X の形(同じ3列で 4 行)と一致しません。
よくある誤解
- 和集合は「重複を残す」と思い込む誤解:関係代数および SQL の UNION(デフォルト)は重複を排除します。重複を残したい場合は SQL の UNION ALL を使います。
- 和と結合(UNION と JOIN)を混同する:UNION は行の縦方向結合(同一スキーマの合成)、JOIN は行どうしをキーで組合せる横方向結合です。目的が異なります。
- 属性名や順序が違っても自動で合成されると思う誤解:和集合では属性(ヘッダ)と型が互換である必要があります。SQL でも列数・型整合性に注意が必要です。
補足コラム
関係代数の記法では X を次のように表します:
SQL の実例:
-- 重複を排除(集合としての和)
SELECT ID, A, B FROM R
UNION
SELECT ID, A, B FROM S;
-- 重複を残す(バグや履歴保持で必要な場合)
SELECT ID, A, B FROM R
UNION ALL
SELECT ID, A, B FROM S;
UNION は内部で重複排除のためのソートやハッシュ処理を行うため、UNION ALL よりコストが高くなることがあります。重複があり得ないと分かる場合は UNION ALL を使うと性能上有利です。
FAQ
Q. もし X に同じタプルが複数行(重複)あったら?
A. 関係モデル(集合セマンティクス)ではタプルの重複は存在しないのが基本です。R と S の両方に同じタプルがある場合でも和集合は一つにまとめます。SQL のテーブル(実装上の多重集合)で同一行が複数ある場合、重複を保持したければ UNION ALL を使い、重複を取り除きたければ UNION を使います。
A. 関係モデル(集合セマンティクス)ではタプルの重複は存在しないのが基本です。R と S の両方に同じタプルがある場合でも和集合は一つにまとめます。SQL のテーブル(実装上の多重集合)で同一行が複数ある場合、重複を保持したければ UNION ALL を使い、重複を取り除きたければ UNION を使います。
Q. 属性の順序や名前が異なる場合は?
A. 関係代数ではヘッダ(属性名・順序)とドメインが整合である必要があります。SQL では SELECT の列順や型が整合していれば実行可能ですが、結果の列名は最初の SELECT の列名が使われる点に注意してください。
A. 関係代数ではヘッダ(属性名・順序)とドメインが整合である必要があります。SQL では SELECT の列順や型が整合していれば実行可能ですが、結果の列名は最初の SELECT の列名が使われる点に注意してください。
関連キーワード: 関係代数、和集合、UNION、UNION ALL、集合セマンティクス、差演算、直積、結合、集合演算

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

