“社員”表から、役割名がプログラマである社員が3人以上所属している部門の部門名を取得するSQL文はどれか。ここで、実線の下線は主キーを表す。 社員(社員番号, 部門名, 社員名, 役割名)
行の条件はWHERE、集約後の条件はHAVINGに書く
選択肢
- アSELECT 部門名 FROM 社員 GROUP BY 部門名 HAVING COUNT(*) >= 3 WHERE 役割名 = 'プログラマ'
- イSELECT 部門名 FROM 社員 WHERE COUNT(*) >= 3 GROUP BY 部門名 HAVING 役割名 = 'プログラマ'
- ウSELECT 部門名 FROM 社員 WHERE COUNT(*) >= 3 AND 役割名 = 'プログラマ' GROUP BY 部門名
- エSELECT 部門名 FROM 社員 WHERE 役割名 = 'プログラマ' GROUP BY 部門名 HAVING COUNT(*) >= 3
正解と解説
正解:エ SELECT 部門名 FROM 社員 WHERE 役割名 = 'プログラマ' GROUP BY 部門名 HAVING COUNT(*) >= 3
SQLの評価順は、WHEREで行を絞り込み、GROUP BYで集約し、HAVINGで集約結果を絞り込む、という順序になる。したがって役割名の条件は行単位なのでWHEREに、人数3人以上という集約後の条件はHAVING COUNT(*)>=3に書く必要がある。集約関数をWHEREに書くことはできず、HAVINGをWHEREより前に置くこともできない。
選択肢ごとの解説
- アHAVINGの後にWHEREを書く構文は認められない。
- イWHEREに集約関数COUNT(*)を書くことはできない。
- ウWHERE句に集約関数を含めているため構文として成立しない。
- エ正しい。WHEREで役割名を絞り、GROUP BYで部門別に集約し、HAVINGで3人以上に絞っている。
同じ分野の他の問題
- スイッチングハブ同士を接続する際に、複数のポートを束ねて一つの論理ポートとして扱う技術はどれか。2016年度 秋期 午前II 問22
- DBMSにおいて、複数のトランザクション処理プログラムが同一データベースを同時に更新する場合、論理的な矛盾を生じさせない…2025年度 春期 午前II 問23
- メモリインタリーブの説明として、適切なものはどれか。2023年度 春期 午前II 問21
- NFTの説明として、適切なものはどれか。2024年度 春期 午前II 問25
- インターネット上やイントラネット上でのファイル共有サービスなどで用いられ、HTTPを拡張して、ファイルやフォルダの参照、…2024年度 春期 午前II 問24
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。