SQLの問題文を初めて見たとき、私は「英語が読めれば解けるのでは」と思った。SELECTは選ぶ、WHEREはどこ、FROMは〜から。単語は中学英語だ。なのに、解けなかった。
原因は英語力ではなかった。読む順番を知らなかったのだ。SQLは書いてある順(SELECTから)ではなく、FROM(どの表?)→WHERE(行を絞る)→SELECT(列を選ぶ)の順で動く。この順番で読み直した日から、呪文は急に手順書になった。
今日は、たった4人の小さな表で基本の4問を追いかける。電卓すら要らない。目と指だけ用意してほしい。
舞台はこの表。4人だけの会社だ
社員表:鈴木(30歳・営業)/田中(25歳・営業)/佐藤(35歳・開発)/高橋(28歳・総務)。
列は name・age・dept(部署)の3つ。以降の4問は、ぜんぶこの表だけで解く。問題のたびに表へ戻って、指で行をなぞってほしい。SQLは頭で読むより、指で追うほうが速く身につく。
【問1】WHERE——行を絞る
SELECT name FROM 社員表 WHERE age >= 30 の結果はどれか。
読む順番どおりにいく。①FROM:社員表が舞台。②WHERE:age が30以上の行だけ残す → 鈴木(30)と佐藤(35)が残り、田中(25)と高橋(28)は脱落。③SELECT:残った行から name の列だけ取り出す。
答え:鈴木、佐藤。
WHEREが「行」を選び、SELECTが「列」を選ぶ。絞ってから、選ぶ。この2段階が、SQLのすべての基本になる。
【問2】ORDER BY——並べ替える
SELECT name FROM 社員表 ORDER BY age DESC の結果の並び順はどれか。
ORDER BYは並べ替え。DESCは降順(大きい順)、ASCまたは省略で昇順だ。ageの大きい順に並べると——
答え:佐藤(35)→ 鈴木(30)→ 高橋(28)→ 田中(25)。
ひっかけの定番はDESCとASCの取り違え。「DESCは下り坂(descend)」とでも覚えて、問題文の語尾を必ず指差し確認してほしい。私はここで一度、まるごと逆に並べた。
【問3】GROUP BY——まとめて数える
SELECT dept, COUNT(*) FROM 社員表 GROUP BY dept の結果はどれか。
GROUP BYは「同じ値ごとにまとめる」。dept でまとめると、営業チーム(鈴木・田中)、開発チーム(佐藤)、総務チーム(高橋)の3グループができる。COUNT(*)は各グループの行数だ。
答え:営業 2、開発 1、総務 1。
まとめた瞬間、結果の1行は「1人」ではなく「1グループ」を表すようになる。この視点の切り替えが、次の問4の伏線になる。
【問4】WHEREとHAVINGは、効くタイミングが違う
SELECT dept, COUNT(*) FROM 社員表 GROUP BY dept HAVING COUNT(*) >= 2 の結果はどれか。
HAVINGは「グループに対する絞り込み」だ。動作順はこうなる。①FROMで表を用意 →②GROUP BYでまとめる →③HAVINGで「人数2人以上のグループだけ」残す。
答え:営業 2(開発と総務は1人なので脱落)。
試験で毎回問われるのがWHEREとHAVINGの違い。WHEREは「まとめる前の行」に、HAVINGは「まとめた後のグループ」に効く。「個人面接がWHERE、チーム審査がHAVING」と覚えておくと、もう混ざらない。

黒猫:読む順番は FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY。書き順と動作順は違う。これを知っているかどうかが、SQLが読める人と読めない人の分かれ目だ。
補足:COUNTの仲間たち(集計関数)
問3で使ったCOUNT(*)には、よく一緒に出る仲間がいる。SUM(合計)・AVG(平均)・MAX(最大)・MIN(最小)だ。たとえば SELECT AVG(age) FROM 社員表 なら、4人の平均年齢(30+25+35+28)÷4 = 29.5 が返る。
どれも「複数の行を、1つの値にまとめる」関数で、GROUP BYと組むと“グループごとの集計”になる。SELECT dept, MAX(age) FROM 社員表 GROUP BY dept なら、部署ごとの最年長(営業30、開発35、総務28)だ。COUNTの動きが指で追えていれば、仲間が増えても同じ要領で読める。
試験では“ここ”で出る
科目Aでは、今日の4文型(WHERE・ORDER BY・GROUP BY・HAVING)の結果を選ばせる問題が定番だ。どんな問題でも、やることは同じ。小さな表を書いて、指で行をなぞる。
頭の中だけで処理しようとすると、必ずどこかで行を見落とす。科目Bのトレースと同じで、手を動かした人から正確になっていく単元だ。仕上げに、ページを閉じて問4をもう一度——「なぜ営業だけ残るのか」を自分の言葉で言えたら合格だ。
SQLは書き順で読まない。FROM→WHERE→SELECT——動作の順番で追えば、呪文は手順書になる。