Step 6:データの並び替えとLIMIT

🔢 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の基本構文

📝 ORDER BYの基本構文
SELECT 列名 FROM テーブル名 ORDER BY 並び替えたい列名;
📌 英語の意味を理解しよう
単語 意味 役割
ORDER 順序、順番 データを並び替える
BY 〜によって 何を基準に並び替えるか

つまり「〇〇列を基準にして、順番に並び替えて」という意味です。

1-3. SQLの書く順番

SQLには書く順番があります。ORDER BYは最後の方に書きます。

📝 SQLを書く順番
  1. SELECT – 何を取得するか
  2. FROM – どのテーブルから
  3. WHERE – どんな条件で(任意)
  4. ORDER BY – どんな順番で(任意)
  5. LIMIT – 何件まで(任意)

📊 2. 練習用テーブルの準備

2-1. テーブルを作成する

Step 5と同じ商品テーブルを使います。以下のSQLを順番に実行してください。

ステップ1:テーブルを作成

※横にスクロールできます

CREATE TABLE 商品 ( 商品ID INTEGER PRIMARY KEY, 商品名 TEXT NOT NULL, 価格 INTEGER NOT NULL, カテゴリ TEXT, 在庫数 INTEGER );

ステップ2:データを追加

※横にスクロールできます

INSERT INTO 商品 VALUES (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);

2-2. 作成したテーブルの内容

📋 商品テーブル(10件のデータ)
商品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 価格;
📌 このSQLの意味
部分 意味
SELECT 商品名, 価格 商品名と価格を取得
FROM 商品 商品テーブルから
ORDER BY 価格 価格を基準に昇順で並び替え
📋 実行結果(10件)
商品名 価格
マウス 1500
キーボード 3000
ランプ 4000
スピーカー 6000
本棚 8000
ヘッドホン 9000
チェア 12000
デスク 15000
モニター 25000
ノートPC 80000

価格が安い順(1500円→80000円)に並びました!

3-3. ASCを明示的に書く

ASCは「昇順(Ascending)」を意味します。省略可能ですが、明示的に書くこともできます。

※横にスクロールできます

— ASCを明示的に書く場合 SELECT 商品名, 価格 FROM 商品 ORDER BY 価格 ASC;
💡 ASCは省略できる

以下の2つは同じ意味です:

  • ORDER BY 価格(ASCを省略)
  • ORDER BY 価格 ASC(ASCを明示)

デフォルトが昇順なので、ASCは省略できます。

3-4. 在庫数が少ない順に並び替える

在庫数が少ない順に並び替えると、発注が必要な商品を見つけやすくなります。

※横にスクロールできます

SELECT 商品名, 在庫数 FROM 商品 ORDER BY 在庫数;
📋 実行結果
商品名 在庫数
デスク 3
ノートPC 5
本棚 5
スピーカー 7
チェア 8

(以下省略)在庫が少ない順に並びました!

⬇️ 4. 降順で並び替える(DESC)

4-1. 降順とは?

降順(こうじゅん)とは、大きい値から小さい値へ並べることです。昇順の逆です。

📌 降順の例
  • 数値:5 → 4 → 3 → 2 → 1
  • 価格:高い → 安い
  • 日付:新しい → 古い
  • 在庫数:多い → 少ない

4-2. 価格が高い順に並び替える

降順で並び替えるには、DESCを使います。

※横にスクロールできます

SELECT 商品名, 価格 FROM 商品 ORDER BY 価格 DESC;
📌 このSQLの意味
部分 意味
ORDER BY 価格 価格を基準に並び替え
DESC 降順(Descending)で
📋 実行結果(10件)
商品名 価格
ノートPC 80000
モニター 25000
デスク 15000
チェア 12000
ヘッドホン 9000
本棚 8000
スピーカー 6000
ランプ 4000
キーボード 3000
マウス 1500

価格が高い順(80000円→1500円)に並びました!

⚠️ 重要:DESCは省略できない

ASCは省略できますが、DESCは省略できません

降順で並び替えたいときは、必ずDESCを書いてください。

4-3. ASCとDESCの比較

📌 ASCとDESCの比較
指定 読み方 意味 省略
ASC アセンディング 昇順(小→大) 可能(デフォルト)
DESC ディセンディング 降順(大→小) 不可

🔀 5. 複数の列で並び替える

5-1. なぜ複数列で並び替えるのか?

1つの列だけで並び替えると、同じ値がある場合に順番が不定になります。

例えば、在庫数で並び替えると、在庫数が「5」の商品が2つあります(ノートPC、本棚)。この2つの順番は保証されません。

複数の列で並び替えると、第1キーが同じ場合に第2キーで順序を決められます。

5-2. カテゴリ順→価格順に並び替える

「まずカテゴリで分類して、同じカテゴリ内では価格が安い順に並べる」という並び替えをしてみましょう。

※横にスクロールできます

SELECT 商品名, カテゴリ, 価格 FROM 商品 ORDER BY カテゴリ, 価格;
📌 このSQLの意味
部分 意味
ORDER BY カテゴリ まずカテゴリで並び替え(第1キー)
, 価格 次に価格で並び替え(第2キー)

カンマで区切って複数の列を指定します。

📋 実行結果
商品名 カテゴリ 価格
ランプ 家具 4000
本棚 家具 8000
チェア 家具 12000
デスク 家具 15000
マウス 電化製品 1500
キーボード 電化製品 3000
スピーカー 電化製品 6000
ヘッドホン 電化製品 9000
モニター 電化製品 25000
ノートPC 電化製品 80000

「家具」が先に来て(五十音順)、各カテゴリ内では価格が安い順に並んでいます。

5-3. 昇順と降順を混在させる

各列ごとに昇順・降順を指定できます。

「カテゴリ順(昇順)で、同じカテゴリ内では価格が高い順」に並べてみましょう。

※横にスクロールできます

SELECT 商品名, カテゴリ, 価格 FROM 商品 ORDER BY カテゴリ ASC, 価格 DESC;
📌 このSQLの意味
  • カテゴリ ASC – カテゴリは昇順(あ→わ)
  • 価格 DESC – 価格は降順(高い→安い)
📋 実行結果
商品名 カテゴリ 価格
デスク 家具 15000
チェア 家具 12000
本棚 家具 8000
ランプ 家具 4000
ノートPC 電化製品 80000
モニター 電化製品 25000

(以下省略)各カテゴリ内で価格が高い順に並んでいます。

🔢 6. LIMITで件数を制限する

6-1. LIMITとは?

LIMIT(リミット)は、取得するデータの件数を制限する機能です。

「上位5件だけ表示」「最新の10件だけ表示」といった場面で使います。

💡 LIMITの活用場面
  • 「売上トップ10」を表示
  • 「最も安い商品」を1件だけ表示
  • 「在庫ワースト5」を表示
  • 「最新の投稿5件」を表示
  • ページネーション(1ページに10件ずつ表示)

6-2. 価格が高い順に上位5件を取得

※横にスクロールできます

SELECT 商品名, 価格 FROM 商品 ORDER BY 価格 DESC LIMIT 5;
📌 このSQLの意味
部分 意味
ORDER BY 価格 DESC 価格が高い順に並び替え
LIMIT 5 上位5件だけ取得
📋 実行結果(5件)
商品名 価格
ノートPC 80000
モニター 25000
デスク 15000
チェア 12000
ヘッドホン 9000

価格トップ5が表示されました!

6-3. 最も安い商品を1件だけ取得

LIMIT 1を使うと、1件だけ取得できます。「最安値」や「最高値」を見つけるのに便利です。

※横にスクロールできます

SELECT 商品名, 価格 FROM 商品 ORDER BY 価格 ASC LIMIT 1;
📋 実行結果(1件)
商品名 価格
マウス 1500

最も安い商品「マウス」だけが表示されました!

6-4. 在庫ワースト3を取得

在庫が少ない商品を見つけて、発注の参考にできます。

※横にスクロールできます

SELECT 商品名, 在庫数 FROM 商品 ORDER BY 在庫数 ASC LIMIT 3;
📋 実行結果(3件)
商品名 在庫数
デスク 3
ノートPC 5
本棚 5

在庫が少ない順にワースト3が表示されました!

📍 7. OFFSETで開始位置を指定する

7-1. OFFSETとは?

OFFSET(オフセット)は、取得を開始する位置をスキップする機能です。

「最初の5件をスキップして、6件目から取得」といった操作ができます。

💡 OFFSETの活用場面

ページネーション(ページ分け)に最適です。

  • 1ページ目:1件目〜10件目
  • 2ページ目:11件目〜20件目
  • 3ページ目:21件目〜30件目

このような表示を実現できます。

7-2. 6件目〜10件目を取得する

「価格が高い順に、6位〜10位を表示」してみましょう。

※横にスクロールできます

SELECT 商品名, 価格 FROM 商品 ORDER BY 価格 DESC LIMIT 5 OFFSET 5;
📌 このSQLの意味
部分 意味
ORDER BY 価格 DESC 価格が高い順に並び替え
LIMIT 5 5件取得
OFFSET 5 最初の5件をスキップ

つまり、6番目から10番目までの5件を取得します。

📋 実行結果(5件)
商品名 価格
本棚 8000
スピーカー 6000
ランプ 4000
キーボード 3000
マウス 1500

6位〜10位の商品が表示されました!

7-3. ページネーションの計算式

📝 OFFSETの計算式

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. ページネーションの実例

※横にスクロールできます

— 1ページ目(1件目〜5件目) SELECT 商品名, 価格 FROM 商品 ORDER BY 価格 DESC LIMIT 5 OFFSET 0; — 2ページ目(6件目〜10件目) SELECT 商品名, 価格 FROM 商品 ORDER BY 価格 DESC LIMIT 5 OFFSET 5;
💡 OFFSET 0は省略可能

LIMIT 5 OFFSET 0LIMIT 5 は同じ意味です。

1ページ目の場合はOFFSETを省略できます。

🎨 8. WHERE、ORDER BY、LIMITを組み合わせる

8-1. 組み合わせの順番

WHERE、ORDER BY、LIMITを組み合わせて使うことができます。書く順番は決まっています。

📝 組み合わせの構文
SELECT 列名 FROM テーブル名
WHERE 条件
ORDER BY 並び替え列
LIMIT 件数;
🔄 SQLの実行順序

SQLは書いた順番と処理される順番が異なります:

  1. FROM – テーブルを特定
  2. WHERE – 条件で絞り込み
  3. ORDER BY – 並び替え
  4. LIMIT/OFFSET – 件数制限
  5. SELECT – 列を取り出す

「まず絞り込んで、並び替えて、件数を制限して、必要な列を取り出す」という流れです。

8-2. 電化製品の価格トップ3を取得

「電化製品」カテゴリの中で、価格が高い順にトップ3を表示してみましょう。

※横にスクロールできます

SELECT 商品名, 価格, カテゴリ FROM 商品 WHERE カテゴリ = ‘電化製品’ ORDER BY 価格 DESC LIMIT 3;
📌 このSQLの処理順序
  1. FROM 商品 – 商品テーブルを参照
  2. WHERE カテゴリ = ‘電化製品’ – 電化製品だけに絞り込み
  3. ORDER BY 価格 DESC – 価格が高い順に並び替え
  4. LIMIT 3 – 上位3件だけ取得
  5. SELECT 商品名, 価格, カテゴリ – 必要な列を取り出す
📋 実行結果(3件)
商品名 価格 カテゴリ
ノートPC 80000 電化製品
モニター 25000 電化製品
ヘッドホン 9000 電化製品

電化製品の中で価格トップ3が表示されました!

8-3. 在庫が少ない電化製品を表示

電化製品で、在庫が10個以下の商品を、在庫が少ない順に表示してみましょう。

※横にスクロールできます

SELECT 商品名, 在庫数, カテゴリ FROM 商品 WHERE カテゴリ = ‘電化製品’ AND 在庫数 <= 10 ORDER BY 在庫数 ASC;
📋 実行結果
商品名 在庫数 カテゴリ
ノート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を使いこなせるように練習しましょう!

問題 1 基本

価格の安い順

全商品を価格が安い順に表示してください。

※横にスクロールできます

SELECT * FROM 商品 ORDER BY 価格;

解説:ASCは省略できます。デフォルトが昇順(安い順)です。

問題 2 基本

在庫が多い順

商品名と在庫数を、在庫が多い順に表示してください。

※横にスクロールできます

SELECT 商品名, 在庫数 FROM 商品 ORDER BY 在庫数 DESC;

解説:「多い順」は降順なので、DESCを使います。

問題 3 基本

価格トップ3

価格が高い商品のトップ3を表示してください。

※横にスクロールできます

SELECT * FROM 商品 ORDER BY 価格 DESC LIMIT 3;

解説:ORDER BYで並び替えてから、LIMITで件数を制限します。

問題 4 基本

最安値商品

最も安い商品を1件だけ表示してください。

※横にスクロールできます

SELECT * FROM 商品 ORDER BY 価格 ASC LIMIT 1;

解説:昇順で並び替えて、最初の1件を取得します。

問題 5 応用

在庫ワースト5

在庫が少ない商品のワースト5を表示してください。

※横にスクロールできます

SELECT * FROM 商品 ORDER BY 在庫数 ASC LIMIT 5;

解説:「少ない順」は昇順なので、ASC(省略可)を使います。

問題 6 応用

カテゴリと価格で並び替え

カテゴリ順に並べ、同じカテゴリ内では価格が高い順に表示してください。

※横にスクロールできます

SELECT * FROM 商品 ORDER BY カテゴリ ASC, 価格 DESC;

解説:カンマで区切って複数の列を指定。各列ごとにASC/DESCを指定できます。

問題 7 応用

電化製品の高額商品トップ3

カテゴリが「電化製品」の商品の中で、価格が高い順にトップ3を表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE カテゴリ = ‘電化製品’ ORDER BY 価格 DESC LIMIT 3;

解説:WHEREで絞り込んでから、ORDER BYとLIMITを使います。

問題 8 応用

中価格帯の商品

価格が5000円以上15000円以下の商品を、価格が安い順に表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE 価格 >= 5000 AND 価格 <= 15000 ORDER BY 価格 ASC;

解説:範囲指定はANDで2つの条件をつなぎます。

問題 9 チャレンジ

2ページ目のデータ

全商品を価格が安い順に並べて、6件目〜10件目を表示してください(1ページ5件として2ページ目)。

※横にスクロールできます

SELECT * FROM 商品 ORDER BY 価格 ASC LIMIT 5 OFFSET 5;

解説:OFFSET 5で最初の5件をスキップして、LIMIT 5で5件取得します。

問題 10 チャレンジ

在庫僅少アラート

在庫数が10個以下の商品を、在庫が少ない順に表示してください。商品名、カテゴリ、在庫数だけを表示してください。

※横にスクロールできます

SELECT 商品名, カテゴリ, 在庫数 FROM 商品 WHERE 在庫数 <= 10 ORDER BY 在庫数 ASC;

解説: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 5LIMIT 5 OFFSET 0と同じ意味です。

Q5: 同じ値がある場合、どういう順番になりますか?

順序は不定です。同じ価格の商品が複数ある場合、その中での順番は保証されません。

確実に順序を決めたい場合は、第2キーを追加しましょう。例:ORDER BY 価格, 商品ID

Q6: ORDER BYなしでLIMITだけ使うとどうなりますか?

順序が不定のまま件数だけ制限されます。

どの行が取得されるか分からないので、通常はORDER BYと一緒に使うことをおすすめします。

📝

学習メモ

SQL基礎 - Step 6

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE