DBデータベーススペシャリスト試験 午前Ⅱ

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

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

“従業員”表から,男女それぞれの最年長従業員を除く全ての従業員を取り出すSQL文とするために,aに入れる字句はどれか。ここで,“従業員”表の構造は次のとおりであり,実線の下線は主キーを表す。
従業員番号を主キーとする従業員表の構造と,性別ごとの最年長従業員を除くための相関サブクエリを空欄aとしたSQL文。
従業員番号を主キーとする従業員表の構造と,性別ごとの最年長従業員を除くための相関サブクエリを空欄aとしたSQL文。

選択肢

  1. ア
    SELECT MIN(生年月日) FROM 従業員 AS S2 GROUP BY S2.性別
  2. イ
    SELECT MIN(生年月日) FROM 従業員 AS S2 WHERE S1.生年月日 > S2.生年月日 OR S1.性別 = S2.性別
  3. ウ
    SELECT MIN(生年月日) FROM 従業員 AS S2 WHERE S1.性別 = S2.性別
  4. エ
    SELECT MIN(生年月日) FROM 従業員 GROUP BY S2.性別
解き方のヒントを見る

男女別の最年長者を除く条件の見方

この問題では、年齢の大小を全体で比べるのか、性別ごとのまとまりの中で比べるのかを切り分けることが中心です。除外対象の定義と、同じ条件に該当する行の扱いを確認しましょう。

この問題で問われていること

表から行を取り出す条件が、性別という分類単位と年齢という比較対象をどのように結び付けているかに注目してください。特定のSQL構文を先に決めず、対象外となる行の定義を言葉で整理します。

視点

集合を分類してから各分類内の比較結果を利用する、という考え方を確認します。個々の行の属性と、分類全体から得る比較情報を混同しないことが重要です。

確認ポイント

  • 最年長という基準を、性別ごとに判定する必要があるか確認する
  • 除外する対象が各分類で一人だけとは限らない可能性を確認する
  • 比較に使う年齢の表現と、実際に行を残す条件の対応を確認する
正解と解説を見る

正解

ウ

解説

外側の従業員S1について、同じ性別の従業員S2だけを副問合せの対象にし、その中で最も早い生年月日を求めます。S1の生年月日がそれより後なら、同じ性別の最年長者ではありません。

理由

生年月日は早い日付ほど年齢が高いため、同じ性別のMIN(生年月日)が最年長者の生年月日です。S1.生年月日がその値より後であれば、S1は最年長者を除く対象になります。

比較

副問合せはS1.性別とS2.性別を対応付ける必要があります。GROUP BYだけでは外側の行と対応せず、性別条件にORを使うと異なる性別まで比較対象に含まれます。また、未定義の別名を参照する構文も不適切です。

選択肢ア

これは不正解だよ。GROUP BYで性別ごとの最小生年月日を求めていますが、外側のS1と副問合せ側の性別を対応付けていません。そのため、S1の性別に応じた一つの値を返す相関副問合せにならず、比較条件にそのまま使えません。

選択肢イ

これは不正解だよ。性別が同じという条件と、生年月日の大小条件をORで結んでいるため、同じ性別なら日付に関係なく対象になり、異なる性別でも日付条件を満たせば対象になります。性別ごとの最年長者を正しく求められません。

選択肢ウ(正解)

これは正解だよ。S1と同じ性別のS2だけを対象にMIN(生年月日)を求めるため、S1の性別における最年長者の生年月日と比較できます。S1の生年月日がその最小値より後の行だけを選ぶので、男女それぞれの最年長者を除外できます。

選択肢エ

これは不正解だよ。FROM句で付けていないS2という別名をGROUP BY句で参照しているため、SQL文として別名の扱いが不正です。さらに、性別ごとの結果を外側のS1に対応付ける条件もなく、各行に適切な基準値を返せません。

学習のポイント

相関副問合せとMIN関数によるグループ別の基準値取得を学びます。

出典:独立行政法人 情報処理推進機構(IPA)令和6年度秋期 データベーススペシャリスト試験 午前Ⅱ 問10(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針