IPA過去問ドリル

平成23年度 特別 データベーススペシャリスト試験 午前Ⅱ 問11

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

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

出典:平成23年度 特別 データベーススペシャリスト試験 午前Ⅱ 問11

正解:ウ

解説

aには,S1と同じ性別の中での最小の生年月日(最年長者の生年月日)を求める副問合せが入ります。外側のWHERE句で「生年月日 > (a)」とすることで,各社員のうち同性別の最年長者(生年月日が最小の人)だけを除外し,それ以外の全ての社員を取り出すことができます。

選択肢ごとの解説

  • 誤り。GROUP BY S2.性別で性別ごとの最小生年月日を全て求めてしまうため,副問合せの結果が複数行になり,単一の値と比較すべき「>」演算子に対して正しく機能しません。
  • 誤り。OR条件により,性別が一致するだけで生年月日の条件を満たさない行まで含まれてしまい,性別ごとの最年長者を正しく求める副問合せになりません。
  • 正しい。S1と同じ性別(S1.性別 = S2.性別)の中での最小の生年月日を求める副問合せとなり,これにより性別ごとの最年長社員だけを除外する条件を実現できます。
  • 誤り。FROM句が単に社員となっており,S2という別名が定義されていないため,WHERE句やGROUP BY句でS2を参照している点が誤りです。
データベーススペシャリストの過去問を演習モードで解く