ITパスポート 2011年 秋期 問65
問題文
関係データベースのA表、B表がある。A表、B表に対して、を行った結果は、それぞれP表、Q表及びR表のどれになるか。ここで、は和集合演算、は共通集合演算を表す。


選択肢
ア:
イ:
ウ:(正解)
エ:
🔒 解説は解答すると表示されます
A表・B表の和集合(A∪B)・共通集合(A∩B)はどれか【ITパスポート 解説】
正解の理由
理由を一言でいうと、和集合(A∪B)は「AにもBにも含まれる全ての行」を1回だけ集めた表、共通集合(A∩B)は「AにもBにも両方にある行」だけを集めた表だからです。問題の A 表と B 表の行(商品コードごとの行)を比較すると、(A∪B) = R 表、(A∩B) = P 表 になり、選択肢ウが一致します。
※用語の簡単な説明
- 表(テーブル): データを行と列で整理したもの。ここでは商品の一覧表です。
- 行(レコード): 1つの商品の情報のまとまり(商品コード・商品名・定価)。
- 和集合(∪、union): AまたはBに含まれるすべての行(重複は1つにまとめる)。
- 共通集合(∩、intersection): AとBの両方にある行だけ。
解法ステップ
- A表とB表の「商品コード」を含む各行を比べる。Aの行: P001, P003, P007, P012, P019。Bの行: P003, P007, P020。
- 共通集合 A∩B(両方にある行)を探す。共通する商品コードは P003 と P007 → これが P 表に対応する。
- 和集合 A∪B(どちらか一方以上にあるすべての行)を集める。P001, P003, P007, P012, P019, P020 → これが R 表に対応する。
- 以上から (A∪B)=R、(A∩B)=P で、選択肢ウが正しい。
選択肢別の誤答解説
-
ア: (A∪B)=P、(A∩B)=R
誤りの理由: P は共通する行のみ(P003、P007)なので和集合には足りない行(P001、P012、P019、P020)が抜けています。逆に R は和集合に該当するため、入れ替わっているだけで合いません。 -
イ: (A∪B)=Q、(A∩B)=R
誤りの理由: Q は A にだけある行(P001、P012、P019)で、和集合には B の P020 と共通行 P003,P007 も含む必要があります。R が共通集合だとしていますが、R は和集合ですので矛盾します。 -
ウ: (A∪B)=R、(A∩B)=P
正しい。上記の解法ステップの通り、集合の定義に合致します。 -
エ: (A∪B)=R、(A∩B)=Q
誤りの理由: (A∩B) は両方にある行(P003、P007)であるべきですが、Q は A にだけある行なので共通集合とは一致しません。
よくある誤解
-
和集合を「単純にAの後ろにBをつなげる(結合)」と考える
- 誤りの本質: 和集合は「重複を取り除いた全体集合」です。Aの全行とBの全行を並べるだけでは、重複(AとBに共通する行)が二重に数えられることになります。集合(set)では重複は1つとして扱います。
-
行の「一部の列だけ」を見て同じ行と判断する
- 誤りの本質: 行の比較は通常「全列(全属性)の組み合わせ」で行います。商品コードが同じでも商品名や定価が違えば別の行とみなされることがあります(ただし問題設定で同一と示されていれば同一行扱い)。
-
「和集合=すべての列が揃っていればよい」と考える(スキーマの違いを無視)
- 注意点: 実務やSQLでは、和集合を使うには両方の表が同じ列構成(列数・型)が必要です。今回の問題は列が同じなので成立します。
補足コラム
- SQLでの対応
- 和集合は SQL の UNION(重複排除)で表現します。重複も残したいときは UNION ALL を使います。
- 共通集合は INTERSECT を使います(DBMS によっては未サポートのものもあります)。
例:
-- AとBが同じ列順・型である前提
-- 和集合(重複排除)
SELECT 商品コード, 商品名, 定価 FROM A
UNION
SELECT 商品コード, 商品名, 定価 FROM B;
-- 共通集合
SELECT 商品コード, 商品名, 定価 FROM A
INTERSECT
SELECT 商品コード, 商品名, 定価 FROM B;
- 実務での注意点
商品コードは「キー(同一商品を一意に識別する値)」になっていることが多いです。キーが揃っていれば行の同一判定が簡単になりますが、キーが無ければ全列比較や別の判定基準が必要になります。
FAQ
Q1: 行の一部の値が違うとどうなる?
A1: 和集合・共通集合は行(レコード)全体で比較します。商品コードは同じでも商品名や定価が異なれば、完全に同じ行とはみなされず共通集合に入らない場合があります。問題では各列が一致している行だけが共通と解釈します。
A1: 和集合・共通集合は行(レコード)全体で比較します。商品コードは同じでも商品名や定価が異なれば、完全に同じ行とはみなされず共通集合に入らない場合があります。問題では各列が一致している行だけが共通と解釈します。
Q2: UNION と UNION ALL の違いは?
A2: UNION は重複を自動で取り除きます。UNION ALL は重複をそのまま保持します。集合の定義に合わせるなら重複を除く UNION を使います。
A2: UNION は重複を自動で取り除きます。UNION ALL は重複をそのまま保持します。集合の定義に合わせるなら重複を除く UNION を使います。
Q3: INTERSECT をサポートしていないデータベースは?
A3: 古いや簡易なデータベースでは INTERSECT をサポートしない場合があります。その場合、INNER JOIN や EXISTS を使って共通行を取得する方法があります。
A3: 古いや簡易なデータベースでは INTERSECT をサポートしない場合があります。その場合、INNER JOIN や EXISTS を使って共通行を取得する方法があります。
関連キーワード: 関係データベース、集合演算、和集合、共通集合、UNION、INTERSECT、重複排除、テーブル操作、SQL、レコード比較

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

