【SQL】ORDER BYで並び替える

SQL

こんにちは、かつコーチです。

「新着順に商品を並べたい」「年齢の若い順に会員を表示したい」など、データを並び替えて表示したい場面は非常に多くあります。
このような並び替えを実現するのがORDER BY句です。

この記事では、これまでと同じusersテーブルを例に、ORDER BYの使い方を解説します。

SELECT * FROM users;
id | name     | age | created_at
---+----------+-----+---------------------
1  | 田中太郎  | 28  | 2026-01-10 10:00:00
2  | 佐藤花子  | 34  | 2026-02-15 09:30:00
3  | 鈴木一郎  | 22  | 2026-03-01 14:20:00

ORDER BYとは?

ORDER BYの役割

ORDER BY句とは、SELECT文の結果を特定のカラムの値に基づいて並び替えるための構文です。
デフォルトではデータベースに保存された順(多くの場合、挿入順やインデックスの都合による順)で返ってくるため、意図した順序で表示したいときは必ずORDER BYを指定します。

基本構文

SELECT カラム名 FROM テーブル名 ORDER BY 並び替えたいカラム名;

例えば、年齢の若い順に会員を並べたい場合は以下のように書きます。

SELECT name, age FROM users ORDER BY age;
name     | age
---------+-----
鈴木一郎  | 22
田中太郎  | 28
佐藤花子  | 34

昇順・降順の指定

ASC(昇順)とDESC(降順)

ORDER BYには、ASC(昇順・小さい順)とDESC(降順・大きい順)を指定できます。
何も指定しない場合は、デフォルトでASC(昇順)になります。

-- 昇順(デフォルトなので省略可能)
SELECT name, age FROM users ORDER BY age ASC;

-- 降順(新しい順・大きい順にしたいとき)
SELECT name, age FROM users ORDER BY age DESC;

「新着順に表示したい」というよくある要件は、created_at(作成日時)をDESCで並べることで実現できます。

SELECT name, created_at FROM users ORDER BY created_at DESC;
name     | created_at
---------+---------------------
鈴木一郎  | 2026-03-01 14:20:00
佐藤花子  | 2026-02-15 09:30:00
田中太郎  | 2026-01-10 10:00:00

複数カラムでの並び替え

複数のカラムを指定すると、最初のカラムで同じ値のときに次のカラムで並び替える、という優先順位付きのソートができます。

SELECT name, age FROM users ORDER BY age DESC, name ASC;

この例では、まず年齢の降順で並べ、もし年齢が同じ人がいた場合は名前の昇順(五十音順)で並べます。
実務では「ステータス順に並べつつ、同じステータス内では日付順に並べたい」といった要件でよく使います。

つまずきやすい設定・注意点

WHERE句とORDER BYの順序を間違える

WHERE句とORDER BYを組み合わせる場合、書く順序を間違えるとエラーになります。

❌ SELECT * FROM users ORDER BY age WHERE age >= 25;
-- エラー: SQL構文エラー

✅ SELECT * FROM users WHERE age >= 25 ORDER BY age;

SQLではSELECT → FROM → WHERE → ORDER BYの順で書くというルールがあります。
私も学習初期にこの順序を逆にしてしまい、構文エラーの原因がしばらく分からなかった経験があります。
「SELECT文は決まった順番でしか書けない」ということを意識しておくと、こうしたミスを防げます。

文字列の並び替えは「文字コード順」になる

文字列カラムをORDER BYで並び替えると、辞書順(文字コード順)にソートされます。
日本語のひらがな・カタカナ・漢字が混在するデータでは、直感的な五十音順にならないことがあるので注意が必要です。
厳密な五十音順が必要な場合は、読み仮名専用のカラムを用意してそちらでソートするのが実務上の定番の対処法です。

まとめ

この記事のポイント

  • ORDER BYはSELECT文の結果を並び替えるための構文
  • 昇順はASC(省略可)、降順はDESCを指定する
  • 複数カラムを指定すると、優先順位付きの並び替えができる
  • SQL文はSELECT → FROM → WHERE → ORDER BYの順で書く必要がある

次に読むべき記事

  • WHERE句で条件を指定して絞り込む
  • LIMIT・OFFSETで件数を制限する

タグ: SQL, 初心者向け, 基本文法

タイトルとURLをコピーしました