SQLの表結合で住所条件はどちらに掛かるのか
基本情報技術者試験 平成31年度春期 午前 問29 / データベース › データ操作
過去問にチャレンジ
"学生"表と"学部"表に対して次のSQL文を実行した結果として,正しいものはどれか。 〔SQL文〕
SELECT 氏名 FROM 学生, 学部 WHERE 所属 = 学部名 AND 学部.住所 = '新宿'
- ア

- イ

- ウ

- エ

会話形式の解説
講師この問題では、学生と学部の行を対応付けた後、どちらの表の住所を調べるかがポイントです。
受験者学生にも学部にも住所があります。まずは学生の所属と学部名が一致する行を組み合わせるのですね。
講師そのとおりです。次の条件には「学部.住所」とあるので、調べるのは所属先の学部の住所です。新宿にある学部はどれですか。
受験者理と工です。経済は、そこに所属する午前桜子の住所が新宿でも、学部の住所は渋谷ですね。
講師はい。理に所属する応用花子と、工に所属する情報太郎が残り、氏名が取り出されます。
受験者応用花子だけの結果では、住所が新宿の工に所属する情報太郎を見落としています。
講師そうです。応用花子と午前桜子の結果も、午前桜子を含めて情報太郎を含めていないため、条件に合いません。
受験者応用花子と情報太郎に午前桜子を加えた結果も、学部の住所が渋谷の人を含むので違いますね。
講師そのとおりです。正しいのは、応用花子と情報太郎の二人を示すウです。
受験者複数の表に同じ列名があっても、「学部.住所」と書かれていれば学部表の列だと分かります。
講師はい。複数の表を使うSQLでは、先に行の対応関係を確かめ、それから条件を適用する表と列を読むと判断しやすくなります。
まとめ
学生の「所属」と学部の「学部名」が一致する行を対応付けます。「学部.住所」が新宿という条件を満たすのは、理と工です。そのため、取り出される氏名は応用花子と情報太郎で、正解はウです。学生本人の住所を条件に当てはめないよう注意します。
解答・解説
正解はウです
この問題のテーマ
二つの表を結合し、どちらの表の住所を条件にしているかを読み取る問題です。
解き方の考え方
まず、学生の「所属」と学部の「学部名」が一致する行を対応付けます。次に、対応する学部の住所が「新宿」の行だけを残し、その学生の氏名を取り出します。学部表で条件に合うのは「理」と「工」です。
選択肢ごとの解説
- ×ア応用花子だけを示す結果です。工学部も住所が新宿なので、工に所属する情報太郎も抽出されます。
- ×イ応用花子と午前桜子を示す結果です。午前桜子の住所は新宿ですが、所属する経済学部の住所は渋谷なので条件を満たしません。また、抽出される情報太郎が含まれていません。
- ○ウ応用花子が所属する理学部と、情報太郎が所属する工学部は、どちらも住所が新宿です。両者の氏名を示しているため、SQL文の実行結果と一致します。
- ×エ応用花子、情報太郎に加えて午前桜子も示す結果です。午前桜子の所属先である経済学部は渋谷にあるため、学部の住所を調べるこの条件から外れます。
POINT
- FROM句に複数の表があるときは、WHERE句の結合条件で対応する行を確認します。
- 「学部.住所」は学部表の住所列を明示しています。
- 抽出条件は学生本人の住所ではなく、所属先の学部の住所に適用します。
