SQL / LESSON 04 / SQL04

SQL:ORDER BY と LIMIT

1学習の目的

2基礎解説

ここまでの結果は並び順が保証されていませんORDER BY を付けて初めて、意味のある順序で取り出せます。

やりたいこと書き方備考
小さい順ORDER BY price既定は昇順(ASC)
大きい順ORDER BY price DESCDESC を明示
複数の基準ORDER BY category, price DESC左が優先
件数を制限LIMIT 3先頭から3件
✅ 覚えるべき重要ポイント
  1. ORDER BY を書かないと並び順は保証されない。たまたま登録順に見えても、データベースの都合で変わりうる。順序が意味を持つなら必ず書く
  2. 既定は昇順(小さい順)。降順にしたいときだけ DESC を付ける。ASC は省略できるが、書いても間違いではない。
  3. 並べ替えの基準は複数指定できるORDER BY category, price DESC なら「まずカテゴリ順、同じカテゴリ内では価格の高い順」。
  4. SQLの句には決まった順番があるSELECT → FROM → WHERE → ORDER BY → LIMIT。この順序を守らないとエラーになる。
  5. 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問)

SQL04-D01 商品を価格の安い順に並べ、name と price を取り出すSQLを書け。 コーディング★☆☆無料
期待される結果

5行。USBメモリ(1500)から順に

ヒント

ORDER BY price と書く。昇順が既定なので DESC は不要。

模範解答
SELECT name, price
FROM products
ORDER BY price;
解説

ORDER BY は FROM の後ろに書く。何も指定しないと昇順(小さい順)になる。

SQL04-D02 ORDER BY price と書いたとき、並び順はどうなるか。
A. 大きい順 B. 小さい順 C. 登録順 D. ランダム
選択★☆☆無料
期待される結果

解答 == B

ヒント

既定の並び順はどちらか。

模範解答
B
解説

既定は昇順(ASC)ORDER BY price ASC と書いても同じ結果になる。降順にしたいときだけ DESC が要る。

SQL04-D03 商品を価格の高い順に並べ、name と price を取り出すSQLを書け。 コーディング★☆☆無料
期待される結果

5行。ノートPC(128000)から順に

ヒント

ORDER BY price DESC と書く。

模範解答
SELECT name, price
FROM products
ORDER BY price DESC;
解説

DESC は descending(下降)の略。ランキングや売上順など、実務では降順のほうが出番が多い。

SQL04-D04 在庫が多い順に並べるSQLを完成させよ。 穴埋め★☆☆無料
コード
SELECT name, stock
FROM products
ORDER BY stock ____;
期待される結果

5行。USBメモリ(120)から順に

ヒント

降順を意味する4文字のキーワード。

模範解答
DESC
解説

対になるのは ASC(ascending・上昇)。ASC は既定なので省略されることが多い

SQL04-D05 SQLの句の正しい順番はどれか。
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 と覚える。

SQL04-D06 価格が高い順の上位3件の name と price を取り出すSQLを書け。 コーディング★★☆無料
期待される結果

3行。ノートPC / モニター / キーボード

ヒント

ORDER BY のあとに LIMIT 3 を付ける。

模範解答
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 3;
解説

ORDER BY と LIMIT はセットで使う。並べ替えずに LIMIT だけ書くと、どの3件が来るか分からない。

SQL04-D07 最も安い商品を1件だけ取り出すSQLを完成させよ。 穴埋め★★☆無料
コード
SELECT name, price
FROM products
ORDER BY price
____ 1;
期待される結果

1行。USBメモリ 1500

ヒント

件数を制限するキーワード。

模範解答
LIMIT
解説

LIMIT 1 で「最も◯◯なもの」が取れる。最高値なら DESC、最安値なら昇順にして1件取ればよい。

SQL04-D08 ORDER BY を書かずに LIMIT 3 だけ指定するとどうなるか。
A. 必ず先頭3件 B. どの3件が返るか保証されない C. エラーになる D. ランダムに3件
選択★★☆無料
期待される結果

解答 == B

ヒント

並び順が決まっていないとき、「先頭」はどこか。

模範解答
B
解説

並び順が保証されていない以上、「先頭3件」も保証されない。たまたま同じ結果に見えても、データ量や環境が変われば変わりうる。LIMIT を使うなら ORDER BY も書く。

SQL04-D09 カテゴリ順に並べ、同じカテゴリの中では価格の高い順にした一覧を、category と name と price で取り出すSQLを書け。 コーディング★★☆無料
期待される結果

5行。PC(ノートPC→モニター) → 周辺機器(キーボード→マウス→USBメモリ)

ヒント

ORDER BY category, price DESC のようにカンマで区切る。左の基準が優先される。

模範解答
SELECT category, name, price
FROM products
ORDER BY category, price DESC;
解説

左に書いた基準が優先される。第1基準が同じだったときだけ、第2基準で並べ替えられる。DESC はその列だけに効く点に注意。

SQL04-D10 在庫金額(price × stock)が大きい順に、name と在庫金額(別名 stock_value)を取り出すSQLを書け。 コーディング★★☆無料
期待される結果

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問)

SQL04-S01 【発注優先リスト】在庫が少ない順に、商品名(別名「商品」)と在庫(別名「在庫」)を取り出すSQLを書け。 コーディング★★☆無料
期待される結果

商品 / 在庫。ノートPC 5 が先頭

ヒント

在庫の少ない順なので昇順。ORDER BY stock と書く。

模範解答
SELECT name AS 商品, stock AS 在庫
FROM products
ORDER BY stock;
解説

「少ない順」は昇順、「多い順」は降順。発注リストは在庫が少ないものから見たいので、この向きになる。

SQL04-S02 【高額商品トップ2】価格が高い順の上位2件について、name・price・category を取り出すSQLを書け。 コーディング★★☆無料
期待される結果

3列2行。ノートPC / モニター

ヒント

ORDER BY price DESC のあと LIMIT 2。

模範解答
SELECT name, price, category
FROM products
ORDER BY price DESC
LIMIT 2;
解説

ランキングの基本形。「売上トップ10」「アクセス数上位5ページ」など、実務のレポートはほぼこの形で作られる。

SQL04-S03 【周辺機器の価格順】category が '周辺機器' の商品を価格の高い順に並べ、name と price を取り出すSQLを書け。 コーディング★★☆無料
期待される結果

3行。キーボード / マウス / USBメモリ

ヒント

WHERE で絞ってから ORDER BY。句の順番は WHERE → ORDER BY。

模範解答
SELECT name, price
FROM products
WHERE category = '周辺機器'
ORDER BY price DESC;
解説

絞り込んでから並べ替えるのが句の順番。逆に書くとエラーになるので、SELECT → FROM → WHERE → ORDER BY の流れを体で覚える。

SQL04-S04 【在庫金額ランキング】在庫金額(price × stock)が大きい順の上位3件について、name・stock・在庫金額(別名 stock_value)を取り出すSQLを書け。 コーディング★★★無料
期待される結果

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万円分あり、ランキングに入ってくる。単価だけ見ていては気づけない

SQL04-S05 【カテゴリ別の価格表】カテゴリ順、同じカテゴリ内では価格の安い順に並べ、分類(別名)・商品名(別名)・価格(別名)を取り出すSQLを書け。ただし価格が2000円以上のものに限る。 コーディング★★★無料
期待される結果

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仕上げ課題

SQL04-FINAL 【在庫レポートの作成】倉庫の責任者から「在庫金額の大きい商品から順に、上位4件をまとめてほしい」と依頼された。ただし在庫が10個未満の商品は発注中なので除外する。

条件
・在庫が 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で最も多くの人がつまずく落とし穴に踏み込む。