射影と DISTINCT
出典: 平成29年度 秋期 応用情報技術者試験 午前 問28 (IPA)
関係 R(ID, A, B, C)の A, C への射影の結果と SQL 文で求めた結果が同じになるように,a に入れるべき字句はどれか。ここで,関係 R を表 T で実現し,表 T に各行を格納したものを次に示す。
T
| ID | A | B | C |
|---|---|---|---|
| 001 | a1 | b1 | c1 |
| 002 | a1 | b1 | c2 |
| 003 | a1 | b2 | c1 |
| 004 | a2 | b1 | c2 |
| 005 | a2 | b2 | c2 |
〔SQL 文〕
SELECT [ a ] A, C FROM T- ア ALL
- イ DISTINCT
- ウ ORDER BY
- エ REFERENCES
正解と解説を見る
正解: イ
- ア: ALL は重複した行もそのまま返す指定 (省略時と同じ) なので、射影の結果と同じになりません。
- イ: DISTINCT で重複した行を 1 行にまとめると、射影の結果と同じになります。正しい答えです。
- ウ: ORDER BY は並べ替えの指定で、SELECT の直後には書けません。
- エ: REFERENCES は外部キーを定義するときの字句です。
ポイント
- 関係演算の 射影 は、指定した列だけを取り出し、重複した行は 1 行にまとめます。
- SQL の SELECT は、そのままでは重複した行も全部返すので、射影と同じ結果にするには DISTINCT を付けます。
- 表 T の (A,C) は (a1,c1) が 2 行ありますが、射影では 1 行になります。