自然結合した表から必要な演算を見分ける
基本情報技術者試験 平成30年度秋期 午前 問28 / データベース › データ操作
過去問にチャレンジ
関係XとYを自然結合した後,関係Zを得る関係代数演算はどれか。

- ア
射影と和
- イ
選択
- ウ
選択と射影
- エ
選択と和
会話形式の解説
講師自然結合した表とZを比べて、行と列がそれぞれどう変わったか確認しましょう。
受験者XとYを学部コードで結ぶと、6人分の行と4つの列になります。Zは2人分の行と3つの列です。
講師そうです。Zに残るのは、学部コードがBの学生番号2と4の行です。条件に合う行を取り出す演算は何ですか。
受験者選択です。ただ、選択だけでは学部コードの列も残ってしまいます。
講師そこで、指定した列だけを残す射影も使います。学部名・学生番号・氏名を残せば、Zの列になります。
受験者行には選択、列には射影が必要なので、正解は「選択と射影」です。
講師そのとおりです。「選択」だけでは4列のままです。「射影と和」では列を減らせても、情報学部以外の行を取り除けません。
受験者では「選択と和」は、2行には絞れても学部コード列を除けないので、Zになりませんね。
講師はい。和は、同じ属性の並びを持つ二つの関係の行を合わせる演算です。今回は行を絞り、列を減らす必要があるので使いません。
まとめ
XとYを自然結合すると、6行4列の表になります。Zでは情報学部の2行だけが残り、学部コード列もありません。行を絞る選択と、列を絞る射影の両方が必要です。和は行を合わせる演算なので、今回の変換には使いません。
解答・解説
正解はウです
この問題のテーマ
XとYを自然結合した表からZを作るには、どの関係代数演算が必要かを問う問題です。行を絞り込む演算と列を絞り込む演算を見分けられるかがポイントです。
解き方の考え方
まず、XとYを共通の属性である学部コードで自然結合した表を考えます。この表には6人分の行があり、列は学生番号・氏名・学部コード・学部名の4つです。この表とZを比べ、行が減っているか、列が減っているかを別々に確認します。Zでは行が学部コードBの2人だけになり、列からは学部コードがなくなっているので、行と列の両方を減らす演算が必要だとわかります。
選択肢ごとの解説
- ×ア 射影と和射影と和の組合せでは、学部コード列を除くことはできます。しかし、射影は列を選ぶだけの演算なので、工学部の4人の行は残ってしまいます。和は二つの関係を合わせる演算なので、行を減らすことには使えません。
- ×イ 選択選択だけを使うと、学部コードがB(情報学部)の2行に絞ることはできます。ただし、結合表の学部コード列はそのまま残るので、3列のZにはなりません。
- ○ウ 選択と射影選択と射影の組合せなら、選択で情報学部(コードB)の学生番号2と4の行だけを取り出せます。さらに射影で学部名・学生番号・氏名の3列を残せば、学部コード列がなくなります。その結果はZと一致します。
- ×エ 選択と和選択と和の組合せでは、選択によって行は2行に絞れます。しかし、和は列を減らす演算ではないので、学部コード列を除けず、Zの列の形になりません。
補足
和は、同じ属性の並びを持つ二つの関係の行を合わせる集合演算です。この問題では関係を合わせる場面がないので、和は使いません。今回の操作を式で書くと π学部名,学生番号,氏名(σ学部名='情報学部'(X⋈Y)) となり、SQLのSELECT句が射影、WHERE句が選択に当たります。
POINT
- 選択は条件に合う行(タプル)を取り出す演算で、表を横方向に切り出すイメージです。
- 射影は指定した列(属性)だけを残す演算で、表を縦方向に切り出すイメージです。
- 自然結合は共通の属性の値が等しい行どうしをつなぎ、共通の属性の列は1つにまとめます。
- 結果の表と元の表を比べ、行と列のどちらが減ったかを確かめると、必要な演算が決まります。
