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