🔖
【初心者向け】SQLの LIMIT と OFFSET の使い方を解説
はじめに
SQLで検索結果の一部だけを取り出したいとき、便利なのが LIMIT と OFFSET です。
特に、ページング処理(「1ページに10件表示」など)では頻繁に使われます。
しかし、次のような疑問を持ったことはないでしょうか?
「
LIMIT 10 OFFSET 20の意味がよく分からない」
「なぜOFFSETを使う必要があるのか?」
本記事では、初心者の方向けに LIMIT と OFFSET の基本的な使い方を、例を交えて解説します。
0. 前提:users テーブルの例
以下のようなテーブルがあるとします。
| 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 |
1. LIMIT とは?:取得する件数を制限する
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 |
2. OFFSET とは?:取得開始位置をずらす
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