SAシステムアーキテクト試験 午前Ⅰ

平成29年度秋期 システムアーキテクト 午前Ⅰ 問9

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

関係R(ID,A,B,C)のA,Cへの射影の結果とSQL文で求めた結果が同じになるように,aに入れるべき字句はどれか。ここで,関係Rを表Tで実現し,表Tに各行を格納したものを次に示す。
関係Rを格納した表Tと,空欄aを含むSQL文。
関係Rを格納した表Tと,空欄aを含むSQL文。

選択肢

  1. ア
    ALL
  2. イ
    DISTINCT
  3. ウ
    ORDER BY
  4. エ
    REFERENCES
解き方のヒントを見る

対応関係を確認するための視点

関係代数とSQLの対応を考えるときは、記法や操作名の印象だけで判断せず、処理の前後で結果に含まれる属性の構成を同じ基準で捉えることに集中します。

この問題で問われていること

確認する観点は、処理後の結果にどの属性が現れるかです。各表現を入力と出力の対応として読み、見た目や記述順ではなく、結果の属性構成を比較してください。

視点

関係代数の記法とSQL文を見比べる際は、まず処理後の結果が持つ属性の範囲を整理します。操作名や書き方の印象から離れ、入力から出力へ情報がどう対応しているかを確認することが大切です。

確認ポイント

  • 処理後の結果に現れる属性の種類を、両方の表現で同じ基準から確認できているか。
  • 入力に含まれる属性と、処理後の結果に現れる属性を混同していないか。
  • 記述の順序や見た目ではなく、出力の属性構成に基づいて比較できているか。
正解と解説を見る

正解

イ

解説

関係RをA列とC列へ射影すると、IDやB列を除いた結果として同じA,Cの組が複数行に現れる場合、それらは一つの組として扱われる。したがってSQLでも重複を除去する指定が必要であり、aにはDISTINCTを入れる。

理由

表Tでは、001と003をA,Cだけで見ると、どちらも(a1,c1)になる。また、002と004はどちらも(a1,c2)ではなく、002は(a1,c2)、004は(a2,c2)です。このように射影後に同じ組が生じるため、関係としての結果では重複を除く必要がある。SQLではDISTINCTが選択結果の重複行を除去する。

比較

SQLのSELECTは、指定列の値が同じ行を通常そのまま複数返すため、関係代数の射影と同じ結果にするには重複排除を明示する。ALLは重複を残す指定であり、ORDER BYは並び順、REFERENCESは表定義などで参照関係を指定する語で、射影結果の重複除去には使わない。

選択肢ア

これは不正解だよ。ALLは検索結果に重複する行があっても、そのまま返す指定である。A列とC列だけを取り出したときに同じ組になる行が複数存在するため、関係代数の射影の結果と一致させる目的には合わない。

選択肢イ(正解)

これは正解だよ。DISTINCTはSELECTで指定した列の値が同じ行を重複として扱い、一つにまとめる指定である。表TではIDやB列を除くと同じA,Cの組が生じるため、A,Cへの射影と同じ結果にするために必要になる。

選択肢ウ

これは不正解だよ。ORDER BYは検索結果を指定した列の順番に並べ替えるための句であり、同じ値をもつ行を一つにまとめる機能はない。並び順を変更しても、射影後に生じる重複行は残るので、目的の結果にはならない。

選択肢エ

これは不正解だよ。REFERENCESは表の定義などで、別の表や列を参照する関係を指定するための語である。SELECT文でA列とC列を抽出した結果の重複を除く機能はなく、射影と同じ集合的な結果を得る指定にはならない。

学習のポイント

射影とSQLの列抽出における重複行の扱いを対応付けて理解する。

出典:独立行政法人 情報処理推進機構(IPA)平成29年度秋期 システムアーキテクト試験 午前Ⅰ 問9(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針