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

データベーススペシャリスト試験 2022年 午前212


問題文

“社員”表から、男女それぞれの最年長社員を除く全ての社員を取り出すSQL文とするために、aに入れる字句はどれか。ここで、“社員”表の構造は次のとおりであり、実線の下線は主キーを表す。   社員(社員番号、社員名、性別、生年月日)   〔SQL文〕
    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 解説】

要点まとめ

  • 結論:男女別の最年長社員(生年月日が最小)を除くには、性別ごとに最小生年月日を取得し、それより後の社員を抽出する必要があります。
  • 根拠:最年長社員は性別ごとに生年月日が最小のため、
    WHERE 生年月日 > (性別ごとの最小生年月日)
    で除外可能です。
  • 差がつくポイント:サブクエリ内で性別ごとに最小生年月日を正しく取得し、外側の行の性別と比較する条件を正確に書くことが重要です。

正解の理由

選択肢ウは、サブクエリで
SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別 = S2.性別
とし、外側の行(S1)の性別と同じ性別の中で最小の生年月日を取得しています。
これにより、男女それぞれの最年長社員の生年月日を正確に取得し、
WHERE 生年月日 > (サブクエリ)
で最年長社員を除外した全社員を抽出できます。
他の選択肢は性別の条件が不適切、または構文エラーがあり、正しく最年長社員を除外できません。

よくある誤解

  • 性別ごとの最小生年月日を取得する際に、
    GROUP BY
    を使わずに単純に
    MIN
    だけで済ませると、性別ごとの区別ができません。
  • サブクエリ内で外側のテーブルの列を正しく参照しないと、意図した比較ができません。

解法ステップ

  1. 男女別に最年長社員の生年月日(最小値)を求める必要があると理解する。
  2. サブクエリで
    MIN(生年月日)
    を取得し、性別ごとに絞り込む条件を付ける。
  3. 外側のテーブルの性別とサブクエリ内の性別を比較し、同じ性別の最小生年月日を取得する。
  4. WHERE 生年月日 > (サブクエリ)
    で最年長社員を除外し、それ以外の社員を抽出する。
  5. SQL文の構文と論理が正しいか確認する。

選択肢別の誤答解説

  • ア:
    GROUP BY S2.性別
    で性別ごとの最小生年月日を取得しているが、サブクエリが複数行を返すため比較できずエラーになる。
  • イ:
    WHERE S1.生年月日 > S2.生年月日 OR S1.性別 = S2.性別
    は論理が不適切で、性別の条件が正しく機能せず誤った結果になる。
  • ウ:
    WHERE S1.性別 = S2.性別
    で外側の性別と一致する最小生年月日を取得し、正しく最年長社員を除外できる。
  • エ:
    GROUP BY S2.性別
    の部分で
    S2
    が定義されておらず構文エラー。テーブルエイリアスの誤り。

補足コラム

SQLで「性別ごとに最小値を取得し、その値を基準に抽出する」場合、サブクエリ内で外側のテーブルの列を参照する相関サブクエリを使うことが多いです。
また、
GROUP BY
を使う場合はサブクエリが複数行を返すため、
IN
JOIN
で処理する方法もありますが、今回の問題文の形式では相関サブクエリが適切です。

FAQ

Q: なぜ
GROUP BY
を使うとエラーになるのですか?
A:
GROUP BY
で複数行が返るため、
WHERE
句の比較対象として単一値が必要な場合にエラーになります。
Q: 相関サブクエリとは何ですか?
A: 外側のクエリの列を参照しながら実行されるサブクエリで、行ごとに異なる値を返すことができます。

関連キーワード: SQL, サブクエリ、相関サブクエリ、最年長社員、生年月日、性別条件、WHERE句、MIN関数、データ抽出
← 前の問題へ次の問題へ →

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

プライバシーポリシー利用規約開発者について