基本情報技術者試験「SQL」の問題
SQLで、部署ごとの社員数を求め、社員数が5人を超える部署だけを抽出したい。GROUP BYで集計した後にその集計結果を条件で絞り込むために用いる句はどれか。
ア集計前の行を絞り込むWHERE句
イ結果を並べ替えるORDER BY句
ウ集計後の結果を絞り込むHAVING句
エ出力件数を制限するための句(行数の上限指定)
正解
ウ.集計後の結果を絞り込むHAVING句
WHEREは集計前の個々の行に対する条件、HAVINGは集計後のグループに対する条件を指定する。『社員数が5人を超える』は集計結果COUNT(*)への条件なのでHAVING句が正しい。
?選択肢ごとの解説
ア ×WHERE句は集計前の行を絞り込む句であり、COUNT(*)などの集約結果を条件にできないため目的に合わない。
イ ×ORDER BY句は結果の並べ替えを行う句であり、条件で行を絞り込む機能は持たない。
ウ ○WHEREは集計前の個々の行に対する条件、HAVINGは集計後のグループに対する条件を指定する。『社員数が5人を超える』は集計結果COUNT(*)への条件なのでHAVING句が正しい。
エ ×出力件数を上限で制限する指定は単に件数を切るだけで、集計値の大小で絞り込むことはできない。
✎くわしく
SQLの評価順序はおおむねFROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BYである。集約関数(COUNT,SUM,AVG等)の結果を条件にするにはグループ化後のHAVINGを使う。WHEREとHAVINGの違いは『集計の前か後か』にある。
✓本番での押さえどころ
試験のコツ
『個々の行の条件=WHERE、グループ全体の条件=HAVING』と評価段階で使い分ける。COUNTやSUMが条件に入ればHAVING。
覚え方
HAVINGは『まとめた後で持っている(having)条件』。グループを作ってから絞る、と語感で覚える。
よくある誤り
集約結果をWHEREで絞ろうとしてエラーになる誤りが頻出。集約条件はHAVINGと覚える。
データベースの他の問題
関係データベースで第3正規形が満たすべき条件として最も適切なものはどれか。トランザクションのACID特性のうち、処理が全て実行されるか全く実行されないかのいずれかであることを保証する性質はどれか。関係データベースの関係モデルにおいて、1行分のデータ、すなわち属性値の組を指す用語はどれか。非正規形の表を第1正規形にするために行う操作として最も適切なものはどれか。主キーが{社員番号,資格コード}である表で、属性『社員名』が社員番号だけで一意に定まる。この状態を表す用語はどれか。社員表と部署表を部署IDで結合する。社員表のうち部署IDが未設定(NULL)の社員も含め、社員を漏れなく結果に残したい。用い…
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-a3-0052