戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

応用情報技術者 2013年 秋期 午前230


問題文

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

選択肢

IDで結合
直積
(正解)

🔒 解説は解答すると表示されます

関係の和集合【午前2解説】

正解の理由

与えられた X は R と S に含まれるすべてのタプルを一つの表にまとめた結果であり、R と S に共通するタプルは一度だけ現れています(例: ID=0001 の (0001,a,100) は両方にあるが X では1件)。この振る舞いは集合論における和集合 と一致します。関係代数の和(集合和)は重複を排除する集合演算であるため、求める演算は (和)です。
補足として、SQL においても同様の区別があり、重複を排除するのが UNION、重複を残すのが UNION ALL である点を押さえてください。

解法ステップ

  1. スキーマ確認:R と S の属性(列)が一致しているか確認する(ID, A, B)。一致していなければ和は定義されない。
  2. 要素列挙:R と S の全タプルを並べる。
  3. 和集合適用:R と S の全タプルを合わせ、同一タプルは一度にする(重複排除)。
  4. 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 を使います。
Q. 属性の順序や名前が異なる場合は?
A. 関係代数ではヘッダ(属性名・順序)とドメインが整合である必要があります。SQL では SELECT の列順や型が整合していれば実行可能ですが、結果の列名は最初の SELECT の列名が使われる点に注意してください。

関連キーワード: 関係代数、和集合、UNION、UNION ALL、集合セマンティクス、差演算、直積、結合、集合演算
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について