レッスン 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 でそれを表現する必要があります。これがなければ、開発中は安定して見えても、インデックス、バージョンアップ、データ増加後に変わることがあります。

要点

単純なクエリでは、FROMWHEREORDER BY の順でデバッグします。まずソース行を確認し、次にフィルタを追加し、最後にソートと制限を追加します。

SQL Formatter で 1 行クエリを読みやすい句に分割してから、フィルタを調べてください。

実践したいときは関連する DevCove ツールを使えます。任意であり、このレッスンの必須部分ではありません。

関連ツールを開く

コース概要へ戻る