レッスン 2
SELECT、WHERE、ORDER BY
日常的な SQL クエリのコア構造を読み解きます。
多くの日常 SQL は次のような単純な形から始まります。
SELECT id, email, created_at
FROM users
WHERE status = 'active'
ORDER BY created_at DESC
LIMIT 50;
次のレイヤーで読みます。
SELECTは結果に現れる列を指定します。FROMは開始テーブルを指定します。WHEREは条件に一致しない行を除外します。ORDER BYは結果の順序を制御します。LIMITは返される行数を上限します。
この順序は読みやすいですが、データベースが必ずしも行ごとに実行するとは限りません。オプティマイザーはインデックスを選び、内部処理を並べ替えることがあります。デバッグでは、論理的な意味を理解することが最初の仕事です。
フィルタに注意
小さなフィルタ変更が挙動を大きく変えることがあります。
WHERE status = 'paid'
AND created_at >= '2026-01-01'
両方の条件が真でなければなりません。OR を使うと、どちらか一方で行が一致します。
WHERE status = 'paid'
OR status = 'refunded'
クエリが間違っているときは、フィルタを一つずつ切り分けます。どの条件が期待していた行を除外しているかを問いかけてください。
ORDER BY がなければ順序は保証されない
テーブルには、アプリケーションコードが依存すべき安定した自然順序はありません。エンドポイントが「最新ユーザー」を返すなら、ORDER BY created_at DESC でそれを表現する必要があります。これがなければ、開発中は安定して見えても、インデックス、バージョンアップ、データ増加後に変わることがあります。
要点
単純なクエリでは、FROM → WHERE → ORDER BY の順でデバッグします。まずソース行を確認し、次にフィルタを追加し、最後にソートと制限を追加します。
SQL Formatter で 1 行クエリを読みやすい句に分割してから、フィルタを調べてください。