本文へスキップ
BecomeCoder

SQL データ操作 (DML)コース · 第1章 データを取り出す · レッスン3

ORDER BY・LIMIT ― 並べ替えと件数制限

ブラウザで完結

導入

SELECT で取り出した行は、そのままだと決まった順が保証されません。「価格が安い順」「年齢が高い順」のように並び順を指定したいときは ORDER BY を使います。「上位◯件だけ」に絞るのが LIMIT です。ランキング表示の定番の組み合わせです。

説明

ORDER BY は「どの列を基準に並べるか」を指定します。FROMWHERE の後ろに書きます。

SELECT name, price FROM products ORDER BY price;

これで価格の昇順(小さい順)に並びます。何も付けないと昇順です。明示するなら ASC(ascending)、逆に降順(大きい順)なら DESC(descending)を付けます。

flowchart LR
    subgraph ASC["ORDER BY price ASC(昇順・小さい順)"]
        A["800 → 1500 → 3200 → … → 128000"]
    end
    subgraph DESC["ORDER BY price DESC(降順・大きい順)"]
        B["128000 → … → 3200 → 1500 → 800"]
    end

並べる基準は複数指定できます。カンマで区切ると、「まず1つ目の列で並べ、同じ値のときは2つ目の列で並べる」という動きになります。

SELECT name, category_id, price FROM products ORDER BY category_id ASC, price DESC;

先頭の数件だけが欲しいときは LIMIT を付けます。「高い順に上位3件」はこう書きます。

SELECT name, price FROM products ORDER BY price DESC LIMIT 3;

LIMITOFFSET を足すと、「先頭から数件を飛ばして、その次から」を取れます(ページ送りで使います。4〜6位を出すなら「上位3件を飛ばして次の3件」)。

SELECT name, price FROM products ORDER BY price DESC LIMIT 3 OFFSET 3;

やってみよう

初期表示のクエリを実行して、価格の高い順に商品が並ぶことを確認しましょう。次に DESC を消して(または ASC にして)、並びが逆になることを見てください。

演習

users テーブルから、年齢(age)が高い順に上位3件の nameage を取り出してください。

ヒント1を見る

降順は ORDER BY age DESC、件数制限は LIMIT 3 です。

ヒント2を見る

SELECT name, age FROM users ORDER BY age DESC LIMIT 3;

実際に動かしてみよう

下のエディタにクエリを書いて「実行」を押すと、ブラウザ内のSQLiteで結果が表示されます。本文の例をそのまま試したり、書き換えたりしてみましょう。

SQL — ブラウザ内で実行(SQLite)

ブラウザ内でSQLを動かす環境(SQLite)を読み込みます(初回のみ一瞬)。
スクロールして表示された時点でも自動で読み込まれます。