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

基本情報技術者 2012年 春期 午前(科目A)31


問題文

表Rに対する次のSQL文の操作はどの関係演算か。
〔SQL文〕  SELECT A1, A3, A5 FROM R
基本情報技術者 2012年 春期 午前(科目A) 問31の問題画像

選択肢

結合
射影(正解)
直積

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

関係データベースの射影操作【午前解説】

正解の理由

SELECT句で指定しているのはテーブルRの属性(列)A1,A3,A5だけであり、行を絞る条件(WHERE)や複数表の組合せ(JOIN, 直積)、集合差を示す構文は使われていません。関係代数における「射影(projection)」は特定の属性集合だけを取り出す演算であり、本問のSQL文はまさにこれに対応します。形式的には と表せます。

解法ステップ

  1. SQL文の構成要素を確認する:SELECT に列名、FROM に単一表 R、WHERE 等の条件は無し。
  2. SQLの各構成要素を関係演算に対応付ける:SELECT → 射影、WHERE → 選択、FROM 複数表 → 直積/結合。
  3. 本文は列の指定のみなので「射影(projection)」と判断する。形式的表記は
  4. 重複の扱い(試験問題で問われる場合)を付記:SQLは DISTINCT 指定なしで重複を残す点を念頭に置く。

選択肢別の誤答解説

  • ア: 結合 — 誤り。結合は複数の表を組み合わせる操作で、FROM に複数表またはJOIN句が必要ですが本問にはありません。
  • イ: 差 — 誤り。差(集合差)は A EXCEPT B のように二つの集合(表)間の操作であり、本SQLは単一表に対する列抽出です。
  • ウ: 射影 — 正解。指定した属性だけを取り出す操作で関係代数の射影 に対応します。
  • エ: 直積 — 誤り。直積は複数表の全組合せを作る操作で FROM に複数表が必要ですが、ここでは単一表Rのみです。

よくある誤解

  • SELECT = 射影 と単純に考えても、SQLは既定で重複行を残すため「関係代数の射影は常に同じ結果」とは限らない点を見落としやすい。
  • WHERE句が無い場合でも「選択(selection)」と混同して行(タプル)を削る操作だと誤認する受験者がいる。SELECTは列の選択が主目的。
  • FROM に複数表が無いときは結合や直積の可能性がないが、問題文をよく確認せず結合を選ぶミスが多い。

補足コラム

  • SQLと関係代数の差:関係代数の射影は集合の性質に従い重複を取り除きますが、SQLのSELECTは既定で重複行を保持します。重複を排除するには SELECT DISTINCT を使います。
  • 属性の順序:SQLではSELECT句に書いた順に列が返りますが、関係代数の集合としての射影は属性集合を扱うため「順序」は本質的ではありません。実装上の出力順は問題になることがあります。
  • 例(SQL):
-- 重複を残す(SQLの通常挙動)
SELECT A1, A3, A5 FROM R;

-- 関係代数の射影に近づける(重複を除去)
SELECT DISTINCT A1, A3, A5 FROM R;

FAQ

Q1: SELECT * は何の関係演算に対応しますか?
A1: SELECT * はすべての属性を返すだけで、関係代数上は恒等操作(射影で全属性を指定した場合)に相当します。
Q2: WHERE があれば射影ではなく選択ですか?
A2: WHERE がある場合、行の絞り込み(選択:σ)と列の抽出(射影:π)が組み合わさることが多いです。どちらが本問の主操作かは文脈で判断しますが、本問は列抽出のみです。
Q3: SQLのSELECT DISTINCT は関係代数の射影と同等ですか?
A3: 実務上は近いですが、関係代数は集合として扱うため厳密には一致します。SQLの実装依存の振る舞い(NULL の扱い等)に注意が必要です。

関連キーワード: 射影、SELECT、DISTINCT、関係代数、列選択、選択(WHERE)、結合、直積、集合差、リレーショナルモデル
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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