平成29年度 秋期 午前 問28
データベース
射影に関する問題
関係 R(ID,A,B,C)の A,C への射影の結果と SQL 文で求めた結果が同じになるように,a に入れるべき字句はどれか。ここで,関係 R を表 T で実現し,表 T に各行を格納したものを次に示す。
原典では,左に表 T が罫線で示され,右に〔SQL 文〕が置かれている。逐語で写した。
表 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
答えと解説を見る
✓ これが正解イDISTINCT
解説
射影は重複を残さないので、重複を除く語が必要です。
設問は、関係の二つの列への射影の結果と同じになるように、問合せに補う字句を選ばせています。まず表 T の五行を、その二つの列だけに絞って書き出してみると、現れる組は三種類しかなく、残りの二行は先に出た組と同じ値の繰り返しだと分かります。ここが分かれ目で、関係代数の射影は結果を集合として扱うため、同じ組を二度持ちません。一方で SQL の問合せは、何も指定しなければ重複した行をそのまま五行返します。この差を埋めて三行に揃えるには、重複した行を一つにまとめる指定である DISTINCT を補うことになります。列を一つ増やすと重複が消えて効かなくなる点も、選んだ列の組で見ているからです。
ほかの選択肢はなぜ違うのか
- アALL:何も書かないときと同じ既定の動きを、言葉にして明示するだけの語です。重複した行はそのまま残るので、結果は五行のままで三行に揃いません。
- ウORDER BY:取り出した行を並べ替えるための句であり、書く場所も文の末尾です。並び順を変えても行数は動かないため、重複を取り除く働きはありません。
- エREFERENCES:参照先の表と列を宣言するときに使う語で、現れるのは表を定義する文の中です。データを取り出す文の先頭に置ける語ではありません。
出典:平成29年度 秋期 応用情報技術者試験 午前 問28
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)