データベーススペシャリスト試験 令和4年度 秋期 午前II 問12
"社員"表から、男女それぞれの最年長社員を除く全ての社員を取り出すSQL文とするために、aに入れる字句はどれか。ここで、"社員"表の構造は次のとおりであり、実線の下線は主キーを表す。 社員(社員番号、社員名、性別、生年月日)
〔SQL文〕 SELECT 社員番号、社員名 FROM 社員 AS S1 WHERE 生年月日 > (「a」)
選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】ウ
生年月日の値は、日付が小さいほど過去に生まれたことを表すので、最年長者の生年月日はMIN関数で求められます。ただし、男女それぞれの最年長者を求める必要があるため、外側の社員S1と同じ性別の社員だけを対象にしなければなりません。ウの副問合せは「S1.性別=S2.性別」によって外側の行と関連付けられた相関副問合せであり、S1と同性の最小生年月日を一つ返します。外側の条件は「生年月日>最小生年月日」なので、最年長者より後に生まれた社員だけが選ばれ、男女それぞれの最年長者が除かれます。同じ最小生年月日の社員が複数いる場合も全員が除かれます。
アは誤りです。性別ごとにGROUP BYするので、通常は男女に対応する複数行が返されます。単一値との比較を行う副問合せとして使用できず、外側の社員と同性の値を選ぶこともできません。
イは誤りです。OR条件によって、同性の全社員だけでなく、S1より生年月日が小さい異性の社員まで副問合せの対象になり得ます。そのため、同性の最年長者の生年月日を安定して求める条件ではありません。
エは誤りです。副問合せ内でS2という別名を定義していないのに「S2.性別」を参照しており、SQLとして不正です。また、別名を補ってもGROUP BYによって複数行が返る問題が残ります。
【ポイント】 相関副問合せでは、内側の問合せが外側の現在行を参照し、外側の行ごとに評価されます。 日付では、最も早い日がMIN、最も遅い日がMAXであることを取り違えないようにします。
出典:令和4年度 秋期 データベーススペシャリスト試験 午前II 問12
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の25問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる