平成30年度 秋期 ITサービスマネージャ試験 午前Ⅱ 問21
テクノロジ/データベース“社員”表から,役割名がプログラマである社員が3人以上所属している部門の部門名を取得するSQL文はどれか。ここで,実線の下線は主キーを表す。 社員(社員番号,部門名,社員名,役割名)
出典:平成30年度 秋期 ITサービスマネージャ試験 午前Ⅱ 問21
- ア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
正解:エ
解説
SQL文はSELECT,FROM,WHERE,GROUP BY,HAVINGの順に記述する必要があります。WHERE句で役割名が'プログラマ'である行に絞り込んだ上でGROUP BYで部門名ごとに集約し,HAVING句でCOUNT(*)が3以上の部門に絞り込むことで,役割名がプログラマである社員が3人以上所属する部門の部門名が取得できます。GROUP BYより前にHAVINGを置く記述や,WHERE句にCOUNT(*)の条件を含める記述は,SQLの構文として誤りです。
選択肢ごとの解説
- ア誤り。GROUP BYより先にHAVING句を記述しており,また絞り込み条件であるWHERE句をGROUP BYの後に置いているため,構文として誤りです。
- イ誤り。WHERE句にCOUNT(*)の条件を記述していますが,集約関数はWHERE句では使用できず,構文として誤りです。
- ウ誤り。WHERE句にCOUNT(*)の条件を記述していますが,集約関数はWHERE句では使用できず,構文として誤りです。
- エ正しい。WHERE句で役割名がプログラマである行に絞り込んだ後にGROUP BYで部門名ごとに集約し,HAVING句でCOUNT(*)>=3の条件を課すことで,目的の部門名を取得できます。