🔖
【初心者向け】SQLの LIMIT と OFFSET の使い方を解説
はじめに
SQLで検索結果の一部だけを取り出したいとき、便利なのが LIMIT
と OFFSET
です。
特に、ページング処理(「1ページに10件表示」など)では頻繁に使われます。
しかし、次のような疑問を持ったことはないでしょうか?
「
LIMIT 10 OFFSET 20
の意味がよく分からない」
「なぜOFFSET
を使う必要があるのか?」
本記事では、初心者の方向けに LIMIT
と OFFSET
の基本的な使い方を、例を交えて解説します。
users
テーブルの例
0. 前提:以下のようなテーブルがあるとします。
id | name | age |
---|---|---|
1 | Alice | 24 |
2 | Bob | 29 |
3 | Carol | 31 |
4 | Dave | 22 |
5 | Eve | 27 |
6 | Frank | 35 |
7 | Grace | 28 |
8 | Hannah | 33 |
9 | Ivan | 30 |
10 | Julia | 26 |
11 | Kevin | 21 |
12 | Laura | 32 |
LIMIT
とは?:取得する件数を制限する
1. LIMIT
は、検索結果から取り出すデータの件数を指定したいときに使います。
例えば「上位10件だけ見たい」といった場合に便利です。
SELECT * FROM users
LIMIT 5;
この場合、users
テーブルから 先頭5件 を取得します。
🔽 実行結果:
id | name | age |
---|---|---|
1 | Alice | 24 |
2 | Bob | 29 |
3 | Carol | 31 |
4 | Dave | 22 |
5 | Eve | 27 |
OFFSET
とは?:取得開始位置をずらす
2. OFFSET
は、どこからデータを取得するか(何件スキップするか) を指定します。
SELECT * FROM users
LIMIT 5 OFFSET 5;
このクエリは:
- 5件スキップして
- (6件目から)5件取得します
つまり、6件目~10件目までのデータを取得します。
🔽 実行結果:
id | name | age |
---|---|---|
6 | Frank | 35 |
7 | Grace | 28 |
8 | Hannah | 33 |
9 | Ivan | 30 |
10 | Julia | 26 |
3. 実用例:ページングに使う(1ページ10件表示)
例えば、Webアプリで「ユーザー一覧を10件ずつ表示する」場面を考えてみましょう。
- 1ページ目 →
LIMIT 10 OFFSET 0
- 2ページ目 →
LIMIT 10 OFFSET 10
- 3ページ目 →
LIMIT 10 OFFSET 20
というように、OFFSET = (ページ数 - 1) × 10
で表現できます。
-- 3ページ目(21~30件目)
SELECT * FROM users
ORDER BY id
LIMIT 10 OFFSET 20;
🔸 通常は
ORDER BY
と組み合わせて、順番が保証されるようにしておきましょう。
4. 注意点
-
LIMIT
だけでも使える(先頭から指定した件数だけ取得) -
OFFSET
だけでは使えない(LIMIT
とセットで使用するのが基本) - 大量のデータがある場合は、パフォーマンスに注意(後ろの方のページは読み込みが遅くなることも)
おわりに
LIMIT
と OFFSET
は、取得する件数と開始位置をコントロールするための便利な構文です。
特に、Webアプリでのページング処理ではよく使われるため、慣れておくと安心です。
以下のようなイメージで覚えると、混乱しにくくなります。
-
LIMIT 10
→ 「最大で10件のデータを取得する」 -
OFFSET 20
→ 「最初の20件をスキップして、そこから取得を開始する」
本記事が理解の一助になれば幸いです。
🔗 関連記事
Discussion