SELECT文って、結局どう書くのが正しいの?
「SELECT文を書こうとしたけど、書く順番がわからない…」
「なんとなく書いてるけど、これで合ってるのか不安」
「WHEREとORDER BYって、どっちが先だっけ?」
こんな悩み、Webエンジニアなら誰でも一度は経験があるはずです。
SQLはデータベースとやり取りするための必須言語ですが、文の構成順序が直感に反しているため、初心者ほど混乱しやすいポイントです。実際、間違った順序で書いてしまうとエラーになるか、意図しない結果を返すこともあります。
この記事では、SELECT文の正しい書き方と順番の理解を軸に、
実務で役立つ書き方のコツやよくある間違いも交えながら、体系的に解説します。
SELECT文の基本構造と書き方の順番を理解する
SELECT文の基本構文
SQLのSELECT文は以下のような構成になっています。
SELECT 列名
FROM テーブル名
WHERE 条件
GROUP BY 列名
HAVING 条件
ORDER BY 列名 ASC|DESC
LIMIT 件数
これを図解すると、次のようになります。
▼SELECT文の構成フロー
┌────────────┐
│ SELECT │ ← 取得する列を指定
├────────────┤
│ FROM │ ← どのテーブルから?
├────────────┤
│ WHERE │ ← どんな条件で?
├────────────┤
│ GROUP BY │ ← グループ化のキー
├────────────┤
│ HAVING │ ← グループ化後の絞り込み
├────────────┤
│ ORDER BY │ ← 並び順を決定
├────────────┤
│ LIMIT │ ← 取得件数を制限
└────────────┘
具体例:ユーザー情報を抽出する
SELECT name, email
FROM users
WHERE is_active = 1
ORDER BY created_at DESC
LIMIT 10;
このSQLは、
「アクティブなユーザーを新しい順に10件だけ取得する」
というシンプルで実務的な用途に使えます。
補足:SQLの実行順序とは違う!?
多くの人が混乱するのが、「SQLは書く順番と実行される順番が違う」という点です。
SQLの「書く順番」と「実行順序」の対応リスト
書く順番(構文順)
-
SELECT
-
FROM
-
WHERE
-
GROUP BY
-
HAVING
-
ORDER BY
-
LIMIT
実行順序(内部的)
-
FROM
-
WHERE
-
GROUP BY
-
HAVING
-
SELECT
-
ORDER BY
-
LIMIT
SQLエンジンはまずFROMでテーブルを読み込み、WHEREで絞り込み、GROUP BYでグループ化し…という流れで内部的に処理していきます。
つまずきやすいSELECT文の落とし穴とその対処法
間違った例:WHEREで集計結果を絞ろうとする
SELECT department, COUNT(*) as staff_count
FROM employees
GROUP BY department
WHERE staff_count > 5; -- ❌構文エラー
原因:WHERE句では集計結果(エイリアス)を使えません。
✅正しい例:集計後の条件はHAVINGで
SELECT department, COUNT(*) as staff_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 5; -- OK
解説:HAVINGはGROUP BY後の絞り込みに使います。WHEREはそれより前段階でのフィルタです。
間違った例:ORDER BYに存在しない列を指定
SELECT name
FROM users
ORDER BY created_at DESC; -- ❌created_atはSELECTに含まれていない
多くのDBではこのような記述も許容されますが、意図しない挙動の原因になります。
正しい例:SELECTにも列を含める
SELECT name, created_at
FROM users
ORDER BY created_at DESC;
補足:明示的に必要な列は全てSELECT句にも含めるのがベストプラクティスです。
SELECT文の基本を押さえて、実務で自在に使いこなそう
この記事のまとめ
-
SELECT文の構文順序と実行順序は違う:理解するとエラーを回避できる
-
WHEREとHAVINGの違いを押さえると、集計系のSQLも自在に書ける
-
ORDER BYやLIMITで結果の整形まで意識すると、実務でも重宝する
次に学ぶべきこと
SELECT文の基本を押さえたら、以下のトピックもおすすめです。
-
「JOINによる複数テーブルの結合方法」
-
「サブクエリの活用テクニック」
-
「ウィンドウ関数で高度な集計を行う方法」
最後に
SQLは書けば書くほど自然と体に馴染んでいく言語です。
小さな疑問や不安をひとつずつ解消しながら、確実にスキルを積み上げていきましょう。
実際に手を動かして試してみたい方は、SQLiteやMySQLのブラウザ実行環境を活用するのもおすすめです。
【外部リンク】
Microsoft Learn:SELECT – Transact-SQL