令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問10
テクノロジ/データベース“従業員”表から,男女それぞれの最年長従業員を除く全ての従業員を取り出す SQL 文とするために,a に入れる字句はどれか。ここで,“従業員”表の構造は次のとおりであり,実線の下線は主キーを表す。 従業員(従業員番号, 従業員名, 性別, 生年月日) ※従業員番号が主キー 〔SQL 文〕 SELECT 従業員番号, 従業員名 FROM 従業員 AS S1 WHERE 生年月日 > ([ a ])
出典:令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問10
- アSELECT MIN(生年月日) FROM 従業員 AS S2 GROUP BY S2.性別
- イSELECT MIN(生年月日) FROM 従業員 AS S2 WHERE S1.生年月日 > S2.生年月日 OR S1.性別 = S2.性別
- ウSELECT MIN(生年月日) FROM 従業員 AS S2 WHERE S1.性別 = S2.性別
- エSELECT MIN(生年月日) FROM 従業員 GROUP BY S2.性別
正解:ウ
解説
副問合せで相関する S1(外側)と S2(内側)の性別が一致する行だけに絞り込んで生年月日の最小値(最年長者の生年月日)を求めることで,S1 の性別に対応する最年長者の生年月日を得ることができます。外側の WHERE 句でこれより新しい(大きい)生年月日の社員だけを取り出すことによって,男女それぞれの最年長従業員だけが除外されます。
選択肢ごとの解説
- ア誤り。GROUP BY だけでは S1 の性別との対応が取れず,男女いずれの最年長者の生年月日とも比較できない相関のない副問合せになってしまいます。
- イ誤り。OR 条件になっているため,性別が一致しなくても生年月日の条件だけで比較対象に含まれてしまい,男女別の最年長者を正しく求められません。
- ウ正しい。S1.性別 = S2.性別 という相関条件によって,S1 と同じ性別の中での最年長者(生年月日の最小値)が求められ,これより後に生まれた(年下の)従業員だけを取り出すことができます。
- エ誤り。FROM 句が “従業員” のみで S2 という別名が付いていないため,S2.性別 という列参照が不正であり,SQL 文として成立しません。