マナビング基本情報技術者

SQLの表結合で住所条件はどちらに掛かるのか

基本情報技術者試験 平成31年度春期 午前 問29 / データベース › データ操作

過去問にチャレンジ

平成31年度春期 午前 問29

"学生"表と"学部"表に対して次のSQL文を実行した結果として,正しいものはどれか。 〔SQL文〕

SELECT 氏名 FROM 学生, 学部 WHERE 所属 = 学部名 AND 学部.住所 = '新宿'
平成31年度春期 午前 問29の図
  1. ア
    平成31年度春期 午前 問29の図(選択肢ア)
  2. イ
    平成31年度春期 午前 問29の図(選択肢イ)
  3. ウ
    平成31年度春期 午前 問29の図(選択肢ウ)
  4. エ
    平成31年度春期 午前 問29の図(選択肢エ)

会話形式の解説

講師講師
この問題では、学生と学部の行を対応付けた後、どちらの表の住所を調べるかがポイントです。
受験者受験者
学生にも学部にも住所があります。まずは学生の所属と学部名が一致する行を組み合わせるのですね。
講師講師
そのとおりです。次の条件には「学部.住所」とあるので、調べるのは所属先の学部の住所です。新宿にある学部はどれですか。
受験者受験者
理と工です。経済は、そこに所属する午前桜子の住所が新宿でも、学部の住所は渋谷ですね。
講師講師
はい。理に所属する応用花子と、工に所属する情報太郎が残り、氏名が取り出されます。
受験者受験者
応用花子だけの結果では、住所が新宿の工に所属する情報太郎を見落としています。
講師講師
そうです。応用花子と午前桜子の結果も、午前桜子を含めて情報太郎を含めていないため、条件に合いません。
受験者受験者
応用花子と情報太郎に午前桜子を加えた結果も、学部の住所が渋谷の人を含むので違いますね。
講師講師
そのとおりです。正しいのは、応用花子と情報太郎の二人を示すウです。
受験者受験者
複数の表に同じ列名があっても、「学部.住所」と書かれていれば学部表の列だと分かります。
講師講師
はい。複数の表を使うSQLでは、先に行の対応関係を確かめ、それから条件を適用する表と列を読むと判断しやすくなります。

まとめ

学生の「所属」と学部の「学部名」が一致する行を対応付けます。「学部.住所」が新宿という条件を満たすのは、理と工です。そのため、取り出される氏名は応用花子と情報太郎で、正解はウです。学生本人の住所を条件に当てはめないよう注意します。

解答・解説

正解はウです

この問題のテーマ

二つの表を結合し、どちらの表の住所を条件にしているかを読み取る問題です。

解き方の考え方

まず、学生の「所属」と学部の「学部名」が一致する行を対応付けます。次に、対応する学部の住所が「新宿」の行だけを残し、その学生の氏名を取り出します。学部表で条件に合うのは「理」と「工」です。

選択肢ごとの解説

  1. ×ア
    応用花子だけを示す結果です。工学部も住所が新宿なので、工に所属する情報太郎も抽出されます。
  2. ×イ
    応用花子と午前桜子を示す結果です。午前桜子の住所は新宿ですが、所属する経済学部の住所は渋谷なので条件を満たしません。また、抽出される情報太郎が含まれていません。
  3. ○ウ
    応用花子が所属する理学部と、情報太郎が所属する工学部は、どちらも住所が新宿です。両者の氏名を示しているため、SQL文の実行結果と一致します。
  4. ×エ
    応用花子、情報太郎に加えて午前桜子も示す結果です。午前桜子の所属先である経済学部は渋谷にあるため、学部の住所を調べるこの条件から外れます。

POINT

  • FROM句に複数の表があるときは、WHERE句の結合条件で対応する行を確認します。
  • 「学部.住所」は学部表の住所列を明示しています。
  • 抽出条件は学生本人の住所ではなく、所属先の学部の住所に適用します。

※出典:平成31年度春期 基本情報技術者試験 午前 問29(一部改変)