応用情報技術者 2017年 秋期 午前2 問28
問題文
関係R (ID, A, B, C)の A,Cへの射影の結果と SQL文で求めた結果が同じになるように、a に入れるべき字句はどれか。ここで、関係Rを表Tで実現し、表Tに各行を格納したものを次に示す。

選択肢
ア:ALL
イ:ORDER BY(正解)
ウ:DISTINCT
エ:REFERENCES
関係RのA,Cへの射影とSQL文の結果一致問題【午前2 解説】
要点まとめ
- 結論:A,Cへの射影結果とSQLの結果を一致させるには、重複行を排除する
DISTINCT
を使う必要があります。 - 根拠:射影は関係の特定の属性だけを抽出し、重複を除いた集合を返す操作だからです。
- 差がつくポイント:SQLの
SELECT
文で重複を排除しないと、関係の射影結果と異なるため、DISTINCT
の理解が重要です。
正解の理由
選択肢イの
正解はウの
したがって、
ORDER BYは結果の並び順を指定する句であり、重複排除とは無関係です。
正解はウの
DISTINCTで、これを指定することでSQLの結果から重複行が除かれ、関係の射影結果と一致します。
したがって、
SELECT DISTINCT A, C FROM Tが正しいSQL文です。
よくある誤解
ORDER BY
を重複排除と勘違いしやすいですが、並び替えのみで重複は除きません。ALL
はデフォルトで重複を許すため、射影結果とは異なります。
解法ステップ
- 射影とは関係の特定の属性だけを抽出し、重複を除く操作であることを確認する。
- SQLの
SELECT
文で重複を除くキーワードが何かを思い出す。 - 選択肢の意味を整理し、重複排除に該当するのは
DISTINCT
であると判断する。 SELECT DISTINCT A, C FROM T
が射影結果と一致するSQL文であると結論づける。
選択肢別の誤答解説
- ア:
ALL
は重複を許すため、射影結果と異なる。 - イ:
ORDER BY
は並び替え句であり、重複排除には関係ない。 - ウ:
DISTINCT
は重複を排除し、射影の結果と一致するため正解。 - エ:
REFERENCES
は外部キー制約の指定であり、SQL文の選択句として不適切。
補足コラム
関係代数の射影は、指定した属性だけを抽出し、重複を除いた集合を返します。SQLの
SELECT文はデフォルトで重複を許すため、射影と同じ結果を得るには
DISTINCTを使う必要があります。
ORDER BYは結果の並び順を制御する句であり、結果の内容には影響しません。
FAQ
Q: SQLの
A:
SELECT文で重複を除くにはどうすればよいですか?
A:
SELECT DISTINCTを使うことで、重複行を除いた結果を取得できます。
Q:
A: いいえ。
ORDER BY句は射影の結果に影響しますか?
A: いいえ。
ORDER BYは結果の並び順を変えるだけで、重複の有無には影響しません。
関連キーワード: 射影、DISTINCT, SQL, 重複排除、関係代数

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

