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