SQL:ORDER BY と LIMIT
1学習の目的
- ORDER BY で結果を並べ替えられるようになる。価格順・売上順など、意味のある順序でデータを見られるようになる。
- LIMIT と組み合わせて「上位◯件」を取り出せるようになる。ランキングや最新◯件といった、実務で最も需要の高い抽出ができるようになる。
2基礎解説
ここまでの結果は並び順が保証されていません。ORDER BY を付けて初めて、意味のある順序で取り出せます。
| やりたいこと | 書き方 | 備考 |
|---|---|---|
| 小さい順 | ORDER BY price | 既定は昇順(ASC) |
| 大きい順 | ORDER BY price DESC | DESC を明示 |
| 複数の基準 | ORDER BY category, price DESC | 左が優先 |
| 件数を制限 | LIMIT 3 | 先頭から3件 |
- ORDER BY を書かないと並び順は保証されない。たまたま登録順に見えても、データベースの都合で変わりうる。順序が意味を持つなら必ず書く。
- 既定は昇順(小さい順)。降順にしたいときだけ DESC を付ける。ASC は省略できるが、書いても間違いではない。
- 並べ替えの基準は複数指定できる。ORDER BY category, price DESC なら「まずカテゴリ順、同じカテゴリ内では価格の高い順」。
- SQLの句には決まった順番がある:SELECT → FROM → WHERE → ORDER BY → LIMIT。この順序を守らないとエラーになる。
- ORDER BY にはAS で付けた別名も計算式も使える。ORDER BY price * stock DESC のように、保存されていない値でも並べ替えられる。
現場使用例:売上ランキング、新着順の一覧、在庫が少ない順の発注リスト、最新のログ10件。「上位◯件」の抽出は実務で最も多い要求。
-- 価格の安い順(既定は昇順) SELECT name, price FROM products ORDER BY price; -- 価格の高い順 SELECT name, price FROM products ORDER BY price DESC; -- 高い順に上位3件だけ SELECT name, price FROM products ORDER BY price DESC LIMIT 3; -- 複数の基準(カテゴリ順 → 同じカテゴリ内は価格の高い順) SELECT category, name, price FROM products ORDER BY category, price DESC; -- 絞り込みと組み合わせる(句の順番に注意) SELECT name, price FROM products WHERE category = '周辺機器' ORDER BY price DESC LIMIT 2;
3基本ドリル(10問)
5行。USBメモリ(1500)から順に
ORDER BY price と書く。昇順が既定なので DESC は不要。
SELECT name, price FROM products ORDER BY price;
ORDER BY は FROM の後ろに書く。何も指定しないと昇順(小さい順)になる。
A. 大きい順 B. 小さい順 C. 登録順 D. ランダム 選択★☆☆無料
解答 == B
既定の並び順はどちらか。
B
既定は昇順(ASC)。ORDER BY price ASC と書いても同じ結果になる。降順にしたいときだけ DESC が要る。
5行。ノートPC(128000)から順に
ORDER BY price DESC と書く。
SELECT name, price FROM products ORDER BY price DESC;
DESC は descending(下降)の略。ランキングや売上順など、実務では降順のほうが出番が多い。
SELECT name, stock FROM products ORDER BY stock ____;
5行。USBメモリ(120)から順に
降順を意味する4文字のキーワード。
DESC
対になるのは ASC(ascending・上昇)。ASC は既定なので省略されることが多い。
A. SELECT → WHERE → FROM → ORDER BY B. SELECT → FROM → WHERE → ORDER BY C. FROM → SELECT → ORDER BY → WHERE D. 順番は自由 選択★☆☆無料
解答 == B
「何を → どこから → どんな条件で → どう並べて」。
B
この順番は決まっていて、変えるとエラーになる。最後に LIMIT が付く。SELECT → FROM → WHERE → ORDER BY → LIMIT と覚える。
3行。ノートPC / モニター / キーボード
ORDER BY のあとに LIMIT 3 を付ける。
SELECT name, price FROM products ORDER BY price DESC LIMIT 3;
ORDER BY と LIMIT はセットで使う。並べ替えずに LIMIT だけ書くと、どの3件が来るか分からない。
SELECT name, price FROM products ORDER BY price ____ 1;
1行。USBメモリ 1500
件数を制限するキーワード。
LIMIT
LIMIT 1 で「最も◯◯なもの」が取れる。最高値なら DESC、最安値なら昇順にして1件取ればよい。
A. 必ず先頭3件 B. どの3件が返るか保証されない C. エラーになる D. ランダムに3件 選択★★☆無料
解答 == B
並び順が決まっていないとき、「先頭」はどこか。
B
並び順が保証されていない以上、「先頭3件」も保証されない。たまたま同じ結果に見えても、データ量や環境が変われば変わりうる。LIMIT を使うなら ORDER BY も書く。
5行。PC(ノートPC→モニター) → 周辺機器(キーボード→マウス→USBメモリ)
ORDER BY category, price DESC のようにカンマで区切る。左の基準が優先される。
SELECT category, name, price FROM products ORDER BY category, price DESC;
左に書いた基準が優先される。第1基準が同じだったときだけ、第2基準で並べ替えられる。DESC はその列だけに効く点に注意。
5行。ノートPC(640000)から順に
ORDER BY price * stock DESC と計算式を直接書ける。別名 stock_value で並べ替えてもよい。
SELECT name, price * stock AS stock_value FROM products ORDER BY stock_value DESC;
ORDER BY には別名も計算式も使える。保存されていない値で並べ替えられるので、「粗利の高い順」といった分析がその場でできる。
4実践シナリオ(5問)
商品 / 在庫。ノートPC 5 が先頭
在庫の少ない順なので昇順。ORDER BY stock と書く。
SELECT name AS 商品, stock AS 在庫 FROM products ORDER BY stock;
「少ない順」は昇順、「多い順」は降順。発注リストは在庫が少ないものから見たいので、この向きになる。
3列2行。ノートPC / モニター
ORDER BY price DESC のあと LIMIT 2。
SELECT name, price, category FROM products ORDER BY price DESC LIMIT 2;
ランキングの基本形。「売上トップ10」「アクセス数上位5ページ」など、実務のレポートはほぼこの形で作られる。
3行。キーボード / マウス / USBメモリ
WHERE で絞ってから ORDER BY。句の順番は WHERE → ORDER BY。
SELECT name, price FROM products WHERE category = '周辺機器' ORDER BY price DESC;
絞り込んでから並べ替えるのが句の順番。逆に書くとエラーになるので、SELECT → FROM → WHERE → ORDER BY の流れを体で覚える。
3列3行。ノートPC / モニター / USBメモリ
計算式を SELECT と ORDER BY の両方で使う。別名で並べ替えると短く書ける。
SELECT name, stock, price * stock AS stock_value FROM products ORDER BY stock_value DESC LIMIT 3;
金額の大きい在庫から確認するのが棚卸しの基本。USBメモリは単価1500円だが在庫120個で18万円分あり、ランキングに入ってくる。単価だけ見ていては気づけない。
3列4行。PC(モニター→ノートPC) → 周辺機器(マウス→キーボード)
WHERE で絞り、ORDER BY で2つの基準を指定する。2つ目は昇順なので DESC は不要。
SELECT category AS 分類, name AS 商品名, price AS 価格 FROM products WHERE price >= 2000 ORDER BY category, price;
WHERE・ORDER BY・複数基準・別名がすべて揃った形。実務のレポート用SQLはこの水準の複雑さが標準になる。
5仕上げ課題
条件
・在庫が 10 個以上
・在庫金額(price × stock)が大きい順
・上位 4 件
表示する列
① name → 別名「商品名」
② category → 別名「分類」
③ price → 別名「単価」
④ stock → 別名「在庫数」
⑤ 在庫金額(price × stock)→ 別名「在庫金額」
期待される結果(5列 × 3行)
商品名 | 分類 | 単価 | 在庫数 | 在庫金額
USBメモリ | 周辺機器 | 1500 | 120 | 180000
キーボード | 周辺機器 | 8500 | 18 | 153000
マウス | 周辺機器 | 3200 | 42 | 134400
※ 上位4件を指定しているのに3行しか出ないのはなぜか、考えながら書くこと。
5列 × 3行が完全一致
WHERE stock >= 10 で絞り、ORDER BY で在庫金額の降順、LIMIT 4 を付ける。句の順番は SELECT → FROM → WHERE → ORDER BY → LIMIT。
SELECT name AS 商品名, category AS 分類, price AS 単価, stock AS 在庫数, price * stock AS 在庫金額 FROM products WHERE stock >= 10 ORDER BY 在庫金額 DESC LIMIT 4;
LIMIT 4 なのに3行しか出ないのは、条件に合う商品が3件しかないからだ。LIMIT は「最大◯件」であって「必ず◯件」ではない。件数が足りなくてもエラーにはならず、あるだけ返る——この挙動を知らないと「なぜ4件出ないのか」と悩むことになる。
そしてこのレポートで注目すべきはUSBメモリが1位になったことだ。単価はわずか1500円で、価格順なら最下位の商品が、在庫金額では首位に立つ。128000円のノートPCは在庫5個で除外され、上位から消えている。どの軸で並べるかによって、見える景色がまったく変わる。
「上位◯件を出して」という依頼を受けたとき、何を基準にした上位なのかを確認する——これがSQLを使う人の最初の仕事になる。単価順なのか、売上順なのか、利益順なのか。基準が違えば、まったく別の商品が並ぶ。
次章では NULL を扱う。「値が入っていない」データをどう判定するか——SQLで最も多くの人がつまずく落とし穴に踏み込む。