平成30年度 春期 午前Ⅱ 問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の性別ごとの最年長を返すかどうかです。最年長は、生年月日が最も古い、つまり最小の社員です。外側の1行S1ごとに、S2の中からS1と同じ性別の行だけを集めて生年月日の最小値を求めれば、その性別の最年長の生年月日になります。S1の生年月日がそれより大きい社員、つまり最年長より後に生まれた社員だけが取り出されるので、男女それぞれの最年長だけが除かれます。外側の行の値を副問合せの中で使う相関副問合せにすることで、男女の区別をつけています。比較の相手が外側の行ごとに変わる、という点が見分け方です。
ほかの選択肢はなぜ違うのか
- アSELECT MIN(生年月日) FRO…:GROUP BYで性別ごとに分けると、副問合せは男女それぞれの最小値の2行を返します。不等号で一つの値と比べる位置に2行が返るので、どちらと比べるかが決まらず、この形では使えません。
- イSELECT MIN(生年月日) FRO…:S1より年上か、同じ性別かのどちらかを満たす行の最小値を取るので、社員全体の最年長の生年月日が返ることになります。全体で一番年上の1人だけが除かれ、もう一方の性別の最年長は残ります。
- エSELECT MIN(生年月日) FRO…:FROM句ではS2という別名を付けていないのに、GROUP BYでS2.性別を使っています。さらに性別ごとに2行が返るので、一つの値と比べる副問合せとしても成り立ちません。
この問題の用語
- OR数学の手法を使って、いくつかの案から最も有利なものを選ぶ考え方です。期待される費用や利益を計算して比べるときに使います。
出典:平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10
同じ用語が出る問題
- 令和6年度 秋期 午前Ⅱ 問10:副問合せに関する問題(OR)
- 令和5年度 秋期 午前Ⅱ 問10:COALESCEに関する問題(OR)
- 平成30年度 春期 午前Ⅱ 問15:インデックスを比較した説明(OR)
- 平成27年度 春期 午前Ⅱ 問15:インデックスを比較した説明(OR)
- 平成25年度 春期 午前Ⅱ 問15:インデックスを比較した説明(OR)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)