🔢 Step 6: データの並び替えとLIMIT
データを並び替えて、必要な件数だけ取得しよう!
- ORDER BYとは何か、なぜ必要か
- 昇順(ASC)と降順(DESC)の使い方
- 複数の列で並び替える方法
- LIMITで件数を制限する方法
- OFFSETでページネーションを実現する方法
- WHERE、ORDER BY、LIMITの組み合わせ
🎯 1. ORDER BYとは?
1-1. ORDER BYの役割
Step 5までで、条件に合うデータを取得できるようになりました。しかし、データの並び順は指定していませんでした。
ORDER BY(オーダーバイ)は、取得したデータを指定した順番に並び替える機能です。
商品を検索した後、こんな並び替えをしますよね:
- 「価格が安い順」
- 「価格が高い順」
- 「人気順」
- 「新着順」
- 「レビュー評価が高い順」
ORDER BYは、まさにこの「並び替え機能」をSQLで実現します。
1-2. ORDER BYの基本構文
SELECT 列名 FROM テーブル名 ORDER BY 並び替えたい列名;
| 単語 | 意味 | 役割 |
|---|---|---|
| ORDER | 順序、順番 | データを並び替える |
| BY | 〜によって | 何を基準に並び替えるか |
つまり「〇〇列を基準にして、順番に並び替えて」という意味です。
1-3. SQLの書く順番
SQLには書く順番があります。ORDER BYは最後の方に書きます。
- SELECT – 何を取得するか
- FROM – どのテーブルから
- WHERE – どんな条件で(任意)
- ORDER BY – どんな順番で(任意)
- LIMIT – 何件まで(任意)
📊 2. 練習用テーブルの準備
2-1. テーブルを作成する
Step 5と同じ商品テーブルを使います。以下のSQLを順番に実行してください。
ステップ1:テーブルを作成
※横にスクロールできます
ステップ2:データを追加
※横にスクロールできます
2-2. 作成したテーブルの内容
| 商品ID | 商品名 | 価格 | カテゴリ | 在庫数 |
|---|---|---|---|---|
| 1 | ノートPC | 80000 | 電化製品 | 5 |
| 2 | マウス | 1500 | 電化製品 | 20 |
| 3 | デスク | 15000 | 家具 | 3 |
| 4 | チェア | 12000 | 家具 | 8 |
| 5 | モニター | 25000 | 電化製品 | 10 |
| 6 | キーボード | 3000 | 電化製品 | 15 |
| 7 | 本棚 | 8000 | 家具 | 5 |
| 8 | ランプ | 4000 | 家具 | 12 |
| 9 | スピーカー | 6000 | 電化製品 | 7 |
| 10 | ヘッドホン | 9000 | 電化製品 | 18 |
⬆️ 3. 昇順で並び替える(ASC)
3-1. 昇順とは?
昇順(しょうじゅん)とは、小さい値から大きい値へ並べることです。
- 数値:1 → 2 → 3 → 4 → 5
- 価格:安い → 高い
- 日付:古い → 新しい
- 文字:あ → い → う → え → お(五十音順)
3-2. 価格が安い順に並び替える
価格が安い順(昇順)に並び替えてみましょう。
※横にスクロールできます
| 部分 | 意味 |
|---|---|
SELECT 商品名, 価格 |
商品名と価格を取得 |
FROM 商品 |
商品テーブルから |
ORDER BY 価格 |
価格を基準に昇順で並び替え |
| 商品名 | 価格 |
|---|---|
| マウス | 1500 |
| キーボード | 3000 |
| ランプ | 4000 |
| スピーカー | 6000 |
| 本棚 | 8000 |
| ヘッドホン | 9000 |
| チェア | 12000 |
| デスク | 15000 |
| モニター | 25000 |
| ノートPC | 80000 |
価格が安い順(1500円→80000円)に並びました!
3-3. ASCを明示的に書く
ASCは「昇順(Ascending)」を意味します。省略可能ですが、明示的に書くこともできます。
※横にスクロールできます
以下の2つは同じ意味です:
ORDER BY 価格(ASCを省略)ORDER BY 価格 ASC(ASCを明示)
デフォルトが昇順なので、ASCは省略できます。
3-4. 在庫数が少ない順に並び替える
在庫数が少ない順に並び替えると、発注が必要な商品を見つけやすくなります。
※横にスクロールできます
| 商品名 | 在庫数 |
|---|---|
| デスク | 3 |
| ノートPC | 5 |
| 本棚 | 5 |
| スピーカー | 7 |
| チェア | 8 |
(以下省略)在庫が少ない順に並びました!
⬇️ 4. 降順で並び替える(DESC)
4-1. 降順とは?
降順(こうじゅん)とは、大きい値から小さい値へ並べることです。昇順の逆です。
- 数値:5 → 4 → 3 → 2 → 1
- 価格:高い → 安い
- 日付:新しい → 古い
- 在庫数:多い → 少ない
4-2. 価格が高い順に並び替える
降順で並び替えるには、DESCを使います。
※横にスクロールできます
| 部分 | 意味 |
|---|---|
ORDER BY 価格 |
価格を基準に並び替え |
DESC |
降順(Descending)で |
| 商品名 | 価格 |
|---|---|
| ノートPC | 80000 |
| モニター | 25000 |
| デスク | 15000 |
| チェア | 12000 |
| ヘッドホン | 9000 |
| 本棚 | 8000 |
| スピーカー | 6000 |
| ランプ | 4000 |
| キーボード | 3000 |
| マウス | 1500 |
価格が高い順(80000円→1500円)に並びました!
ASCは省略できますが、DESCは省略できません。
降順で並び替えたいときは、必ずDESCを書いてください。
4-3. ASCとDESCの比較
| 指定 | 読み方 | 意味 | 省略 |
|---|---|---|---|
| ASC | アセンディング | 昇順(小→大) | 可能(デフォルト) |
| DESC | ディセンディング | 降順(大→小) | 不可 |
🔀 5. 複数の列で並び替える
5-1. なぜ複数列で並び替えるのか?
1つの列だけで並び替えると、同じ値がある場合に順番が不定になります。
例えば、在庫数で並び替えると、在庫数が「5」の商品が2つあります(ノートPC、本棚)。この2つの順番は保証されません。
複数の列で並び替えると、第1キーが同じ場合に第2キーで順序を決められます。
5-2. カテゴリ順→価格順に並び替える
「まずカテゴリで分類して、同じカテゴリ内では価格が安い順に並べる」という並び替えをしてみましょう。
※横にスクロールできます
| 部分 | 意味 |
|---|---|
ORDER BY カテゴリ |
まずカテゴリで並び替え(第1キー) |
, 価格 |
次に価格で並び替え(第2キー) |
カンマで区切って複数の列を指定します。
| 商品名 | カテゴリ | 価格 |
|---|---|---|
| ランプ | 家具 | 4000 |
| 本棚 | 家具 | 8000 |
| チェア | 家具 | 12000 |
| デスク | 家具 | 15000 |
| マウス | 電化製品 | 1500 |
| キーボード | 電化製品 | 3000 |
| スピーカー | 電化製品 | 6000 |
| ヘッドホン | 電化製品 | 9000 |
| モニター | 電化製品 | 25000 |
| ノートPC | 電化製品 | 80000 |
「家具」が先に来て(五十音順)、各カテゴリ内では価格が安い順に並んでいます。
5-3. 昇順と降順を混在させる
各列ごとに昇順・降順を指定できます。
「カテゴリ順(昇順)で、同じカテゴリ内では価格が高い順」に並べてみましょう。
※横にスクロールできます
カテゴリ ASC– カテゴリは昇順(あ→わ)価格 DESC– 価格は降順(高い→安い)
| 商品名 | カテゴリ | 価格 |
|---|---|---|
| デスク | 家具 | 15000 |
| チェア | 家具 | 12000 |
| 本棚 | 家具 | 8000 |
| ランプ | 家具 | 4000 |
| ノートPC | 電化製品 | 80000 |
| モニター | 電化製品 | 25000 |
(以下省略)各カテゴリ内で価格が高い順に並んでいます。
🔢 6. LIMITで件数を制限する
6-1. LIMITとは?
LIMIT(リミット)は、取得するデータの件数を制限する機能です。
「上位5件だけ表示」「最新の10件だけ表示」といった場面で使います。
- 「売上トップ10」を表示
- 「最も安い商品」を1件だけ表示
- 「在庫ワースト5」を表示
- 「最新の投稿5件」を表示
- ページネーション(1ページに10件ずつ表示)
6-2. 価格が高い順に上位5件を取得
※横にスクロールできます
| 部分 | 意味 |
|---|---|
ORDER BY 価格 DESC |
価格が高い順に並び替え |
LIMIT 5 |
上位5件だけ取得 |
| 商品名 | 価格 |
|---|---|
| ノートPC | 80000 |
| モニター | 25000 |
| デスク | 15000 |
| チェア | 12000 |
| ヘッドホン | 9000 |
価格トップ5が表示されました!
6-3. 最も安い商品を1件だけ取得
LIMIT 1を使うと、1件だけ取得できます。「最安値」や「最高値」を見つけるのに便利です。
※横にスクロールできます
| 商品名 | 価格 |
|---|---|
| マウス | 1500 |
最も安い商品「マウス」だけが表示されました!
6-4. 在庫ワースト3を取得
在庫が少ない商品を見つけて、発注の参考にできます。
※横にスクロールできます
| 商品名 | 在庫数 |
|---|---|
| デスク | 3 |
| ノートPC | 5 |
| 本棚 | 5 |
在庫が少ない順にワースト3が表示されました!
📍 7. OFFSETで開始位置を指定する
7-1. OFFSETとは?
OFFSET(オフセット)は、取得を開始する位置をスキップする機能です。
「最初の5件をスキップして、6件目から取得」といった操作ができます。
ページネーション(ページ分け)に最適です。
- 1ページ目:1件目〜10件目
- 2ページ目:11件目〜20件目
- 3ページ目:21件目〜30件目
このような表示を実現できます。
7-2. 6件目〜10件目を取得する
「価格が高い順に、6位〜10位を表示」してみましょう。
※横にスクロールできます
| 部分 | 意味 |
|---|---|
ORDER BY 価格 DESC |
価格が高い順に並び替え |
LIMIT 5 |
5件取得 |
OFFSET 5 |
最初の5件をスキップ |
つまり、6番目から10番目までの5件を取得します。
| 商品名 | 価格 |
|---|---|
| 本棚 | 8000 |
| スピーカー | 6000 |
| ランプ | 4000 |
| キーボード | 3000 |
| マウス | 1500 |
6位〜10位の商品が表示されました!
7-3. ページネーションの計算式
OFFSET = (ページ番号 – 1) × 1ページの件数
| ページ | 計算式 | OFFSET | 取得する範囲 |
|---|---|---|---|
| 1ページ目 | (1 – 1) × 5 | 0 | 1件目〜5件目 |
| 2ページ目 | (2 – 1) × 5 | 5 | 6件目〜10件目 |
| 3ページ目 | (3 – 1) × 5 | 10 | 11件目〜15件目 |
7-4. ページネーションの実例
※横にスクロールできます
LIMIT 5 OFFSET 0 と LIMIT 5 は同じ意味です。
1ページ目の場合はOFFSETを省略できます。
🎨 8. WHERE、ORDER BY、LIMITを組み合わせる
8-1. 組み合わせの順番
WHERE、ORDER BY、LIMITを組み合わせて使うことができます。書く順番は決まっています。
SELECT 列名 FROM テーブル名 WHERE 条件 ORDER BY 並び替え列 LIMIT 件数;
SQLは書いた順番と処理される順番が異なります:
- FROM – テーブルを特定
- WHERE – 条件で絞り込み
- ORDER BY – 並び替え
- LIMIT/OFFSET – 件数制限
- SELECT – 列を取り出す
「まず絞り込んで、並び替えて、件数を制限して、必要な列を取り出す」という流れです。
8-2. 電化製品の価格トップ3を取得
「電化製品」カテゴリの中で、価格が高い順にトップ3を表示してみましょう。
※横にスクロールできます
- FROM 商品 – 商品テーブルを参照
- WHERE カテゴリ = ‘電化製品’ – 電化製品だけに絞り込み
- ORDER BY 価格 DESC – 価格が高い順に並び替え
- LIMIT 3 – 上位3件だけ取得
- SELECT 商品名, 価格, カテゴリ – 必要な列を取り出す
| 商品名 | 価格 | カテゴリ |
|---|---|---|
| ノートPC | 80000 | 電化製品 |
| モニター | 25000 | 電化製品 |
| ヘッドホン | 9000 | 電化製品 |
電化製品の中で価格トップ3が表示されました!
8-3. 在庫が少ない電化製品を表示
電化製品で、在庫が10個以下の商品を、在庫が少ない順に表示してみましょう。
※横にスクロールできます
| 商品名 | 在庫数 | カテゴリ |
|---|---|---|
| ノートPC | 5 | 電化製品 |
| スピーカー | 7 | 電化製品 |
| モニター | 10 | 電化製品 |
電化製品で在庫が少ない商品が、少ない順に表示されました!
📝 Step 6 のまとめ
| 学んだこと | 書き方 | 意味 |
|---|---|---|
| 昇順で並び替え | ORDER BY 列名 |
小さい→大きい順(ASCは省略可) |
| 降順で並び替え | ORDER BY 列名 DESC |
大きい→小さい順 |
| 複数列で並び替え | ORDER BY 列1, 列2 |
第1キー、第2キーの順で並び替え |
| 件数を制限 | LIMIT 件数 |
指定した件数だけ取得 |
| 開始位置をスキップ | OFFSET 件数 |
指定した件数をスキップ |
| 組み合わせ | WHERE → ORDER BY → LIMIT |
絞り込み→並び替え→件数制限 |
データの並び替えと件数制限ができるようになりました!
次のStep 7では、LIKE演算子であいまい検索(「〇〇を含む」など)や、IN演算子で複数の値を指定する方法を学びます。
📝 練習問題
ORDER BYとLIMITを使いこなせるように練習しましょう!
価格の安い順
全商品を価格が安い順に表示してください。
※横にスクロールできます
解説:ASCは省略できます。デフォルトが昇順(安い順)です。
在庫が多い順
商品名と在庫数を、在庫が多い順に表示してください。
※横にスクロールできます
解説:「多い順」は降順なので、DESCを使います。
価格トップ3
価格が高い商品のトップ3を表示してください。
※横にスクロールできます
解説:ORDER BYで並び替えてから、LIMITで件数を制限します。
最安値商品
最も安い商品を1件だけ表示してください。
※横にスクロールできます
解説:昇順で並び替えて、最初の1件を取得します。
在庫ワースト5
在庫が少ない商品のワースト5を表示してください。
※横にスクロールできます
解説:「少ない順」は昇順なので、ASC(省略可)を使います。
カテゴリと価格で並び替え
カテゴリ順に並べ、同じカテゴリ内では価格が高い順に表示してください。
※横にスクロールできます
解説:カンマで区切って複数の列を指定。各列ごとにASC/DESCを指定できます。
電化製品の高額商品トップ3
カテゴリが「電化製品」の商品の中で、価格が高い順にトップ3を表示してください。
※横にスクロールできます
解説:WHEREで絞り込んでから、ORDER BYとLIMITを使います。
中価格帯の商品
価格が5000円以上15000円以下の商品を、価格が安い順に表示してください。
※横にスクロールできます
解説:範囲指定はANDで2つの条件をつなぎます。
2ページ目のデータ
全商品を価格が安い順に並べて、6件目〜10件目を表示してください(1ページ5件として2ページ目)。
※横にスクロールできます
解説:OFFSET 5で最初の5件をスキップして、LIMIT 5で5件取得します。
在庫僅少アラート
在庫数が10個以下の商品を、在庫が少ない順に表示してください。商品名、カテゴリ、在庫数だけを表示してください。
※横にスクロールできます
解説:WHEREで在庫10個以下に絞り込み、ORDER BYで少ない順に並び替えます。
❓ よくある質問
Q1: ORDER BYを書く位置は決まっていますか?
はい、決まっています。WHEREの後、LIMITの前です。
正しい順番:SELECT → FROM → WHERE → ORDER BY → LIMIT
Q2: ASCは省略できるのに、なぜDESCは省略できないのですか?
デフォルトが昇順(ASC)だからです。
何も指定しないと昇順になるので、降順にしたい場合は明示的にDESCを書く必要があります。
Q3: 日本語の文字列でも並び替えできますか?
はい、できます。商品名やカテゴリなどのTEXT型でも並び替え可能です。
日本語の場合、五十音順(あいうえお順)に並びます。ただし、漢字の場合は文字コード順になるため、期待通りにならないことがあります。
Q4: LIMITだけでOFFSETなしでも使えますか?
はい、使えます。OFFSETを省略すると、先頭から指定件数を取得します。
LIMIT 5はLIMIT 5 OFFSET 0と同じ意味です。
Q5: 同じ値がある場合、どういう順番になりますか?
順序は不定です。同じ価格の商品が複数ある場合、その中での順番は保証されません。
確実に順序を決めたい場合は、第2キーを追加しましょう。例:ORDER BY 価格, 商品ID
Q6: ORDER BYなしでLIMITだけ使うとどうなりますか?
順序が不定のまま件数だけ制限されます。
どの行が取得されるか分からないので、通常はORDER BYと一緒に使うことをおすすめします。
学習メモ
SQL基礎 - Step 6