カテゴリ: データベース 更新日: 2026/01/09

SQLのLIMITとOFFSETを徹底解説!初心者でもわかるデータ取得の範囲指定方法

SQLのLIMITとOFFSETの使い方を初心者向けにわかりやすく説明
SQLのLIMITとOFFSETの使い方を初心者向けにわかりやすく説明

先生と生徒の会話形式で理解しよう

生徒

「データベースから全部じゃなくて、一部だけデータを取り出したいんですけど、どうすればいいんですか?」

先生

「それはLIMITとOFFSETという機能を使います。例えば、百人の名簿から最初の十人だけ見たい時や、十一人目から二十人目までを見たい時に使える便利な機能です。」

生徒

「ページ分けみたいなことができるんですね!」

先生

「その通りです。ウェブサイトで商品一覧が十個ずつ表示されて、次のページボタンを押すと次の十個が出てくるのも、この仕組みで作られていますよ。」

1. LIMITとOFFSETとは何か?

1. LIMITとOFFSETとは何か?
1. LIMITとOFFSETとは何か?

LIMITとOFFSETは、SQLでデータベースからデータを取得する際に、取得するデータの範囲を指定するための命令です。データベースには大量のデータが保存されていることが多く、全てのデータを一度に取得すると時間がかかったり、画面に表示しきれなかったりします。

LIMITは「何件取得するか」を指定し、OFFSETは「何件目から取得を始めるか」を指定します。紙の名簿で例えると、LIMITは「何人分コピーするか」、OFFSETは「何人目からコピーするか」を決めるイメージです。

用語解説
LIMIT: 取得するデータの件数を制限する命令
OFFSET: 取得を開始する位置を指定する命令
レコード: データベースの表における一行分のデータ

2. LIMITの基本的な使い方

2. LIMITの基本的な使い方
2. LIMITの基本的な使い方

まずはLIMITの使い方から見ていきましょう。LIMITは、SELECT文の最後に記述します。基本的な書き方は「LIMIT 取得件数」です。

例えば、会員テーブルから最初の三件だけを取得したい場合を見てみましょう。まず、データベースに以下のようなデータがあるとします。

membersテーブル(全データ)


id | name         | age | point
---+--------------+-----+-------
1  | 田中太郎     | 28  | 1500
2  | 山田花子     | 22  | 3200
3  | 佐藤次郎     | 35  | 800
4  | 鈴木美咲     | 19  | 2100
5  | 高橋健一     | 41  | 500
6  | 伊藤さくら   | 30  | 4000
7  | 渡辺大輔     | 25  | 1800

このテーブルから最初の三件だけを取得するには、以下のSQLを実行します。


SELECT *
FROM members
LIMIT 3;

このSQLを実行すると、以下のような結果が得られます。

実行結果


id | name         | age | point
---+--------------+-----+-------
1  | 田中太郎     | 28  | 1500
2  | 山田花子     | 22  | 3200
3  | 佐藤次郎     | 35  | 800

このように、LIMIT 3と指定することで、データベースから最初の三件のレコードだけを取得できます。これは、ウェブサイトで「新着順に三件表示」といった機能を実装する時によく使われる方法です。

3. OFFSETと組み合わせた使い方

3. OFFSETと組み合わせた使い方
3. OFFSETと組み合わせた使い方

OFFSETは、LIMITと組み合わせて使うことで、取得を開始する位置を指定できます。基本的な書き方は「LIMIT 取得件数 OFFSET スキップ件数」です。OFFSETに指定した数だけ、最初のデータを飛ばしてから取得を開始します。

先ほどのmembersテーブルを使って、四件目から三件を取得する例を見てみましょう。


SELECT *
FROM members
LIMIT 3 OFFSET 3;

OFFSET 3と指定することで、最初の三件をスキップして、四件目から取得が始まります。実行結果は以下のようになります。

実行結果


id | name         | age | point
---+--------------+-----+-------
4  | 鈴木美咲     | 19  | 2100
5  | 高橋健一     | 41  | 500
6  | 伊藤さくら   | 30  | 4000

このように、最初の三件(田中太郎、山田花子、佐藤次郎)がスキップされ、四件目の鈴木美咲から三件が取得されています。

注意点
OFFSETの数え方は「ゼロ」から始まります。OFFSET 0は最初のレコードから、OFFSET 1は二件目から、という意味になります。

4. ページネーション(ページ分け)の実装方法

4. ページネーション(ページ分け)の実装方法
4. ページネーション(ページ分け)の実装方法

LIMITとOFFSETを組み合わせることで、ウェブサイトでよく見るページネーション機能を実装できます。ページネーションとは、大量のデータを複数のページに分けて表示する機能のことです。

例えば、一ページに三件ずつ表示する場合、各ページで以下のようなSQLを実行します。

一ページ目(最初の三件)


SELECT *
FROM members
LIMIT 3 OFFSET 0;

二ページ目(四件目から三件)


SELECT *
FROM members
LIMIT 3 OFFSET 3;

三ページ目(七件目から三件)


SELECT *
FROM members
LIMIT 3 OFFSET 6;

このように、OFFSETの値を「(ページ番号 - 1) × 1ページあたりの件数」で計算することで、任意のページのデータを取得できます。例えば、五ページ目なら「(5 - 1) × 3 = 12」なので、OFFSET 12となります。

5. ORDER BYと組み合わせた実践的な使い方

5. ORDER BYと組み合わせた実践的な使い方
5. ORDER BYと組み合わせた実践的な使い方

実務では、LIMITとOFFSETをORDER BY(並べ替え)と組み合わせて使うことが多いです。ORDER BYは、データを特定の順番に並べ替える命令です。

例えば、ポイントが高い順に上位三名を表示したい場合は、以下のようにします。


SELECT *
FROM members
ORDER BY point DESC
LIMIT 3;

ORDER BY point DESCは「pointカラムの値を降順(大きい順)に並べ替える」という意味です。DESCはDescending(降順)の略で、反対に昇順(小さい順)にしたい場合はASC(Ascending)を使います。実行結果は以下のようになります。

実行結果


id | name         | age | point
---+--------------+-----+-------
6  | 伊藤さくら   | 30  | 4000
2  | 山田花子     | 22  | 3200
4  | 鈴木美咲     | 19  | 2100

このように、ポイントが高い順に並べ替えられた状態で、上位三件が取得できます。ランキング表示などでよく使われる手法です。

6. データベース製品による書き方の違い

6. データベース製品による書き方の違い
6. データベース製品による書き方の違い

注意点として、LIMITとOFFSETの書き方はデータベース製品によって少し異なります。ここまで説明してきた書き方は、MySQL、PostgreSQL、SQLiteなどで使える標準的な方法です。

しかし、Microsoft SQL ServerやOracleでは異なる書き方をします。例えば、SQL Serverでは「TOP」や「OFFSET FETCH」という構文を使います。自分が使っているデータベースに合わせた書き方を確認することが大切です。

主なデータベースでの書き方
MySQL/PostgreSQL/SQLite: LIMIT と OFFSET を使用
SQL Server: TOP や OFFSET FETCH を使用
Oracle: ROWNUM や FETCH FIRST を使用

7. パフォーマンスを考慮した使い方

7. パフォーマンスを考慮した使い方
7. パフォーマンスを考慮した使い方

LIMITとOFFSETは便利な機能ですが、OFFSETの値が大きくなると処理が遅くなることがあります。例えば、OFFSET 10000と指定すると、データベースは内部で最初の一万件を読み飛ばしてから結果を返すため、時間がかかってしまいます。

大量のデータを扱う場合は、WHERE句で条件を指定したり、インデックスを活用したりすることで、より効率的にデータを取得できます。インデックスとは、データベースの検索を高速化するための仕組みで、本の索引のようなものです。

初心者のうちは、まずLIMITとOFFSETの基本的な使い方を理解することが大切です。データ量が少ないうちは問題なく動作しますので、安心して練習してください。

8. 実務でよく使う具体例

8. 実務でよく使う具体例
8. 実務でよく使う具体例

最後に、実務でよく使われる具体的な例をいくつか紹介します。これらのパターンを覚えておくと、様々な場面で応用できます。

最新の投稿を五件表示

ブログやSNSで、最新の投稿を五件だけ表示したい場合です。


SELECT *
FROM posts
ORDER BY created_at DESC
LIMIT 5;

ランキングの六位から十位を表示

上位五位は別枠で表示して、六位から十位を一覧表示する場合です。


SELECT *
FROM players
ORDER BY score DESC
LIMIT 5 OFFSET 5;

これらの例のように、LIMITとOFFSETを使えば、データの表示方法を柔軟にコントロールできます。ウェブサイトやアプリケーション開発において、非常によく使われる重要な機能です。

ポイント

  • LIMITは取得件数を制限する
  • OFFSETは取得開始位置を指定する
  • ORDER BYと組み合わせると便利
  • ページネーション実装の基本技術
  • 大量データではパフォーマンスに注意
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Ruby
Rubyのハッシュ走査を完全マスター!each・each_key・each_valueの使い方