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

テクノロジデータベース

この問題は2024(R6)秋 データベーススペシャリスト 午前IIに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

“従業員”表から,男女それぞれの最年長従業員を除く全ての従業員を取り出すSQL文とするために,aに入れる字句はどれか。ここで,“従業員”表の構造は次のとおりであり,実線の下線は主キーを表す。

SQL文
図の説明テキスト

〔SQL 文〕
SELECT 従業員番号, 従業員名 FROM 従業員 AS S1
WHERE 生年月日 > ( a )

解答・解説を読む

正解: 選択肢

設問は「男女それぞれの最年長従業員を除く全ての従業員を取り出す」SQL文の空欄を埋める問題です。

このような条件を満たすSQL文は、外側のクエリで評価中の従業員(S1)の生年月日が、同じ性別の最年長従業員の生年月日よりも大きい(若い)ことを条件として抽出します。
空欄aには外側のクエリの従業員と同じ性別の従業員の中から、最も古い(最小の)生年月日を取得する相関サブクエリが入ると推測できます。
この条件を満たすためには、S2(サブクエリ内の従業員表)と S1(外側の従業員表)を性別で結びつける WHERE S1.性別 = S2.性別 が必要です。

各選択肢の解説

  • SELECT MIN(生年月日) FROM 従業員 AS S2 GROUP BY S2.性別
    外側のクエリとの相関条件がなく、男女それぞれの最年長従業員の生年月日を返してしまいます。外側のクエリの比較演算子に対して複数行を返すサブクエリはエラーとなります。
  • SELECT MIN(生年月日) FROM 従業員 AS S2 WHERE S1.生年月日 > S2.生年月日 OR S1.性別 = S2.性別
    条件に OR を使用しているため、同じ性別という縛りが崩れてしまい、正しい最年長の生年月日を取得できません。
  • SELECT MIN(生年月日) FROM 従業員 AS S2 WHERE S1.性別 = S2.性別

正解です。評価中の従業員(S1)と同じ性別の従業員(S2)を対象として、その中で最小の生年月日(最年長)を取得する正しい相関サブクエリです。

  • SELECT MIN(生年月日) FROM 従業員 GROUP BY S2.性別
    FROM 従業員 の部分で S2 というエイリアス(別名)を定義していないにもかかわらず、GROUP BY S2.性別 を指定しているため、構文エラーとなります。