令和2年度 10月 午前Ⅱ 問10
データ操作
相関副問合せに関する問題
“社員”表から,男女それぞれの最年長社員を除く全ての社員を取り出す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.性別
答えと解説を見る
✓ これが正解ウSELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別 = S2.性別
解説
同じ性別の中での最小の生年月日と比べる相関副問合せにします。
男女それぞれの最年長を除くには、外側の社員S1ごとに、S1と同じ性別の社員の中で最も早い生年月日を求め、S1の生年月日がそれより後かを比べればよいわけです。WHERE S1.性別 = S2.性別 の副問合せは、外側の行の性別を条件に使う相関副問合せで、S1と同じ性別の社員の生年月日の最小値を1つだけ返します。S1がその性別の最年長なら、生年月日が最小値と等しくなって条件を満たさずに除かれ、それ以外の社員は残ります。比較演算子の右に置く副問合せは値を1つだけ返す必要がある、という点と合わせて確かめると判断できます。
ほかの選択肢はなぜ違うのか
- アSELECT MIN(生年月日) FRO…:GROUP BY S2.性別 でまとめると、男女それぞれの最小の生年月日が1行ずつ、計2行返ります。比較演算子の右に2行を返す副問合せは置けないうえ、外側のS1の性別とも結び付いていません。
- イSELECT MIN(生年月日) FRO…:条件がORなので、S1と同じ性別の社員に加え、S1より年上の社員は性別を問わず含まれます。S1が同性の中で最年長でも、異性にもっと年上の社員がいればその生年月日が最小値になり、S1は除かれずに残ります。
- エSELECT MIN(生年月日) FRO…:FROM句で別名S2を付けていないのに S2.性別 を参照しているうえ、性別ごとに2行の結果を返す形です。どちらの点でも、外側の各社員と同じ性別の最小値を1つ返す副問合せになっていません。
この問題の用語
- OR数学の手法を使って、いくつかの案から最も有利なものを選ぶ考え方です。期待される費用や利益を計算して比べるときに使います。
出典:令和2年度 10月 データベーススペシャリスト試験 午前Ⅱ 問10
同じ用語が出る問題
- 令和6年度 秋期 午前Ⅱ 問10:副問合せに関する問題(OR)
- 令和5年度 秋期 午前Ⅱ 問10:COALESCEに関する問題(OR)
- 平成30年度 春期 午前Ⅱ 問15:インデックスを比較した説明(OR)
- 平成27年度 春期 午前Ⅱ 問15:インデックスを比較した説明(OR)
- 平成25年度 春期 午前Ⅱ 問15:インデックスを比較した説明(OR)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)