戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2014年 午前210


問題文

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

選択肢

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.性別

“社員” 表から男女それぞれの最年長社員を除く全ての社員を取り出す SQL 文【午前2 解説】

正解の理由

選択肢ウは、S1(外側の社員表)とS2(内側の社員表)を性別で結びつけ、S2の性別ごとの最小生年月日(最年長)を取得しています。これにより、S1.生年月日 > (a)の条件で「最年長社員の生年月日より後」の社員、つまり最年長社員を除いた社員を正しく抽出できます。

解法ステップ

  1. 最年長社員は生年月日が最も古い(最小)であることを理解する。
  2. 男女別に最小の生年月日を求めるため、GROUP BY 性別を使う。
  3. 外側の社員表S1と内側の集約クエリS2を性別で結合する。
  4. S1.生年月日 > (a)の条件で最年長社員を除外する。
  5. 正しいSQL文を選択肢から判断する。

選択肢別の誤答解説

  • ア:GROUP BY S2.性別は正しいが、S2のエイリアスが外側で使われていないため文法的に不完全。
  • イ:WHERE句の条件が複雑で誤っており、性別の比較や生年月日の条件が正しくない。
  • エ:GROUP BY S2.性別とあるが、S2のエイリアスが定義されておらず文法エラー。
  • ウ:S1.性別 = S2.性別で性別を結合し、MIN(生年月日)で最年長を取得しているため正解。

よくある誤解

性別ごとの最小生年月日を求める際に、GROUP BY句を使わずに全体の最小値を取ったり、性別の条件を正しく結合しないケースが多いです。

補足コラム

SQLで「最年長社員を除く」など条件付きで集約関数を使う場合、サブクエリで性別ごとの最小値を取得し、外側のクエリで比較する方法が一般的です。GROUP BYとエイリアスの使い方に注意しましょう。

FAQ

Q: なぜMIN(生年月日)を使うのですか?
A: 生年月日が最も古い社員が最年長なので、最小値を取得するためです。
Q: 性別ごとに最年長を除くにはどうすればいいですか?
A: 性別でグループ化し、各グループの最小生年月日を取得して比較条件に使います。

関連キーワード: SQL, サブクエリ、集約関数、GROUP BY, 生年月日、性別条件、最年長社員
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリスト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について