平成31年度 春期 午前 問29
データベース
結合に関する問題
“学生”表と“学部”表に対して次の SQL 文を実行した結果として,正しいものはどれか。
学生
| 氏名 | 所属 | 住所 |
|---|---|---|
| 応用花子 | 理 | 新宿 |
| 高度次郎 | 人文 | 渋谷 |
| 午前桜子 | 経済 | 新宿 |
| 情報太郎 | 工 | 渋谷 |
学部
| 学部名 | 住所 |
|---|---|
| 工 | 新宿 |
| 経済 | 渋谷 |
| 人文 | 渋谷 |
| 理 | 新宿 |
〔SQL文〕
SELECT 氏名 FROM 学生, 学部 WHERE 所属 = 学部名 AND 学部.住所 = '新宿'
選択肢は原典では「氏名」を見出しにした結果表。
- ア応用花子
- イ応用花子/午前桜子
- ウ応用花子/情報太郎
- エ応用花子/情報太郎/午前桜子
答えと解説を見る
✓ これが正解ウ応用花子/情報太郎
解説
新宿にある学部を先に絞り、その所属者を取り出します。
二つの表を並べて書く形は、結合を表します。条件の一つ目は、所属と学部名が等しいことです。これが二つの表をつなぐ手掛かりになります。条件の二つ目は、学部の住所が新宿であることです。住所という名前は両方の表に出てきます。ですから、どちらの表かを頭に付けて指しています。新宿にある学部は、工と理の二つです。工に所属するのは情報太郎、理に所属するのは応用花子です。よって取り出される氏名は、その二人になります。正解の肢は、応用花子と情報太郎を並べています。学生の住所は、この問いでは一度も使われません。表の名を付けずに書くと、どちらの住所か決まりません。名前が重なる列こそ、書き方に気を配ります。等しい値どうしを対応づける形を、等結合と呼びます。先に絞ってから対応づけても、結果は変わりません。
ほかの選択肢はなぜ違うのか
- ア応用花子:一人しか残らない結果になっています。新宿にある学部を、片方だけ数えた形です。工に所属する学生が抜け落ちています。学部の表をもう一度たどります。該当は二つあります。理と工の二つを取りこぼしなく拾います。片方だけでは足りません。数え漏れです。
- イ応用花子/午前桜子:学生の住所が新宿である人を並べています。条件で使うのは学部の側の住所です。頭に付いた表の名を読み落とすと、この形になります。住んでいる場所は問われていません。同名の列を取り違えた例です。学部の表の住所を見ます。
- エ応用花子/情報太郎/午前桜子:三人を並べていて、一人多くなっています。学部の住所と学生の住所の、どちらかが新宿なら拾う形です。午前桜子の所属は経済で、その学部は渋谷にあります。本人の住まいが新宿なので紛れ込みました。条件が指しているのは学部の表の住所だけです。
出典:平成31年度 春期 基本情報技術者試験 午前 問29
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)