IPA過去問ドリル

令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問10

テクノロジ/データベース

“従業員”表から,男女それぞれの最年長従業員を除く全ての従業員を取り出す SQL 文とするために,a に入れる字句はどれか。ここで,“従業員”表の構造は次のとおりであり,実線の下線は主キーを表す。 従業員(従業員番号, 従業員名, 性別, 生年月日) ※従業員番号が主キー 〔SQL 文〕 SELECT 従業員番号, 従業員名 FROM 従業員 AS S1 WHERE 生年月日 > ([ a ])

出典:令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問10

正解:ウ

解説

副問合せで相関する S1(外側)と S2(内側)の性別が一致する行だけに絞り込んで生年月日の最小値(最年長者の生年月日)を求めることで,S1 の性別に対応する最年長者の生年月日を得ることができます。外側の WHERE 句でこれより新しい(大きい)生年月日の社員だけを取り出すことによって,男女それぞれの最年長従業員だけが除外されます。

選択肢ごとの解説

  • 誤り。GROUP BY だけでは S1 の性別との対応が取れず,男女いずれの最年長者の生年月日とも比較できない相関のない副問合せになってしまいます。
  • 誤り。OR 条件になっているため,性別が一致しなくても生年月日の条件だけで比較対象に含まれてしまい,男女別の最年長者を正しく求められません。
  • 正しい。S1.性別 = S2.性別 という相関条件によって,S1 と同じ性別の中での最年長者(生年月日の最小値)が求められ,これより後に生まれた(年下の)従業員だけを取り出すことができます。
  • 誤り。FROM 句が “従業員” のみで S2 という別名が付いていないため,S2.性別 という列参照が不正であり,SQL 文として成立しません。
データベーススペシャリストの過去問を演習モードで解く