基本情報技術者 2016年 春期 午前(科目A) 問27
問題文
関係XとYを結合した後、関係Zを得る関係代数演算はどれか。

選択肢
ア:射影と選択(正解)
イ:射影と和
ウ:選択
エ:選択と和
🔒 解説は解答すると表示されます
射影と選択による結合【午前解説】
正解の理由
正解は ア(射影と選択)です。問題は「XとYを結合した後にどうすればZになるか」を問うており、結合結果には学生番号・氏名・学部コード・学部名などの属性が含まれます。Zは「学部名」「学生番号」「氏名」という列構成で、かつ学部名が「情報学部」に限定された行のみが含まれています。したがって、
- 学部名が「情報学部」である行だけを抽出する(選択 σ)
- 必要な列だけを取り出し並べ替える(射影 π)
という操作の組合せでZが得られます。数学的には次の式で表せます。
具体的には、Xの学生(学生番号2と4が学部コードB)とYの学部コードBが学部名「情報学部」に対応するため、結合後に選択で2件を残し、射影で列を学部名・学生番号・氏名にするとZと一致します。
解法ステップ
- XとYを学部コードで結合する(自然結合または同値結合)。結合結果に学部名が付与される。
- 結合結果から学部名 = '情報学部' の行だけを抽出する(選択 σ)。
- 抽出後、列を学部名・学生番号・氏名の順に取り出す(射影 π)。
関係代数での表現:
SQLでの対応例:
SELECT Y.学部名, X.学生番号, X.氏名
FROM X JOIN Y ON X.学部コード = Y.学部コード
WHERE Y.学部名 = '情報学部';
選択肢別の誤答解説
- ア: 射影と選択 — 正解。選択で情報学部を抽出し、射影で列を学部名・学生番号・氏名に整える操作がZに対応します。
- イ: 射影と和 — 誤り。和(UNION)は異なる関係から行を結合するための演算で、行の絞り込み(選択)には使いません。また和を使うには両側のスキーマが同一である必要があります。本問の用途とは合致しません。
- ウ: 選択 — 誤り。選択だけでは不要な列(学部コード等)が残り、列の順序や不要列の除去ができないためZの形になりません。
- エ: 選択と和 — 誤り。和は不要であり、Zを得るには列整形のための射影が必須です。
よくある誤解
- 「和(ユニオン)を使えば良い」と考える誤解:和は同一スキーマの2つの関係を結合する演算であって、列の抽出や行の絞り込みには使いません。
- 「選択だけでよい」とする誤解:選択は行の絞り込みのみで列順や不要列の除去はできないため、Zと同じ列構成にするには射影が必要です。
- 「射影を先にすると安全」と思う誤解:射影で選択に必要な属性(例えば学部名)を消してしまうと後で選択できなくなります。属性の有無に注意してください。
補足コラム
- 結合の種類:本問では学部コードで結合するので自然結合(または等値結合)が適切です。外部結合(LEFT/RIGHT/OUTER)はここでは不要です。
- 操作順序:一般に「選択(σ)は射影(π)の前でも後でも構わない場合がある」一方で、射影で選択に必要な属性を失うと選択ができなくなります。したがって、選択で使う属性は射影に残す必要があります。
- 実務上の注意:データベース実行計画では、効率化のために最適化器が選択・射影の順序を入れ替える場合がありますが、論理的に等価であることが前提です。
FAQ
Q1: 射影と選択の順序は常に重要ですか?
A1: 論理的に結果が等価になることも多いですが、射影で選択に必要な属性を消すと選択できなくなるため、属性の有無に応じて順序は重要になります。
A1: 論理的に結果が等価になることも多いですが、射影で選択に必要な属性を消すと選択できなくなるため、属性の有無に応じて順序は重要になります。
Q2: 和(UNION)はどんなときに使いますか?
A2: 同じスキーマの2つ以上の関係から行を結合して重複を除きたいときに使います。本問のような「列の抽出+行の絞り込み」には不適切です。
A2: 同じスキーマの2つ以上の関係から行を結合して重複を除きたいときに使います。本問のような「列の抽出+行の絞り込み」には不適切です。
Q3: Zの列順が違っても同じと言えますか?
A3: 関係代数では列の順序は意味を持ちませんが、問題文で列順が指定されている場合は射影で順序を合わせる必要があります。
A3: 関係代数では列の順序は意味を持ちませんが、問題文で列順が指定されている場合は射影で順序を合わせる必要があります。
関連キーワード: 関係代数、射影、選択、結合、ナチュラルジョイン、π、σ、SQL、列操作

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

