この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は ウ

解説

SQLの結合と選択条件を読み解く問題です。SQL文は「SELECT 氏名 FROM 学生, 学部 WHERE 所属 = 学部名 AND 学部.住所 = '新宿'」で、学生表と学部表を「所属=学部名」で結合し、結合相手の学部の住所が新宿である学生の氏名を求めます。学生表の各行を順に確認します。応用花子は所属が理で、学部表の理の住所は新宿なので条件を満たします。高度次郎は所属が人文で、人文の住所は渋谷なので不一致。午前桜子は所属が経済で、経済の住所は渋谷なので不一致。情報太郎は所属が工で、工の住所は新宿なので条件を満たします。したがって結果は応用花子と情報太郎の2名となり、ウが正解です。注意すべきは、条件が「学部.住所」と表名で修飾されている点です。学生表にも住所列があるため、どちらの住所で絞り込むのかを取り違えると、学生自身の住所が新宿の応用花子・午前桜子を選んでしまいます。同名列の修飾の読み取りがこの問題の核心です。

なぜ他の選択肢は違うのか

選択肢 ア
応用花子1名だけという結果は、結合条件と住所条件をともに満たす行の数え漏れです。情報太郎も、所属する工学部の住所が新宿なので条件を満たします。学生表の4行すべてについて、結合相手となる学部の住所を一つずつ確認する作業を最後まで行えば、2名が該当することが分かります。1名見つけた時点で確認をやめないことが大切です。
選択肢 イ
応用花子と午前桜子の組合せは、「学部.住所='新宿'」を「学生.住所='新宿'」と読み違えた場合の結果です。学生表で住所が新宿なのはこの2名ですが、条件は学部表の住所です。学生表と学部表の両方に「住所」という同名の列があるため、表名修飾(学部.住所)がどちらの表を指すかを正確に読み取る必要があります。本問最大の引っかけポイントです。
選択肢 エ
応用花子・情報太郎・午前桜子の3名は、学部の住所条件(新宿)と学生の住所条件を混在させて適用した場合に出やすい結果です。午前桜子の所属は経済学部で、その住所は渋谷なので、学部.住所='新宿' の条件を満たしません。各学生について「所属学部はどこか→その学部の住所は新宿か」という2段階の確認を、機械的に表をたどって行えば誤りを防げます。

解くときのポイント

同名列がある結合では「表名.列名」の修飾がどちらの表を指すかを最初に確認。あとは1行ずつ「結合相手を探す→条件を確認」を全行分やり切れば確実に解ける。