【SQL】LIMIT句を使って取得するデータの数を制限する

データを◯件だけ取得したいといった具合に、取得するデータの数を制限したい場合はLIMIT句を使います。

本記事ではLIMIT句・OFFSET句の使い方、またORDER BY句を併用する方法まで具体例を交えて解説します。

LIMIT句とは

LIMIT句を使うことで、SELECT文でデータを取得する際に取得するデータの件数を制限することができます。例えば、最大10件のデータまで取得したいといった場合にLIMIT句を使うと実現できます。

基本の使い方

LIMIT句の基本構文は下記です。

SQL
SELECT カラム名
FROM テーブル名
LIMIT 取得するデータの数;

LIMITの後に取得したいデータの行数を数値で記載します。

また、何行目から10件のデータを取得するといった具合に、取得するデータの開始位置を指定したい場合もあります。このような場合にはOFFSET句を併用することで実現できます。

OFFSET句を使った場合の基本構文が下記です。

SQL
SELECT カラム名
FROM テーブル名
LIMIT 取得するデータの数 OFFSET 除外行数;

LIMIT 取得するデータの数を指定した後にOFFSET 除外行数を指定することで、先頭からOFFSETで指定した行番号までを除外することができます。従って、OFFSETで指定した行のプラス一行目から取得を開始できるのです。

それでは、具体例を見ていきましょう。

サンプルデータ

下記のとおり、usersテーブルを用意します。

idnameageaddress
1山田25東京都
2鈴木34神奈川県
3佐藤28北海道
4大野45大阪府
5小池56京都府
6近藤23東京都
7佐々木37千葉県
8宮田31福岡県
usersテーブル

LIMIT句を使って取得するデータの数を制限する

LIMIT句を使って取得する行数を制限する方法を解説していきます。

検索クエリ

レコードを3件だけ取得する

SQL
SELECT *
FROM users
LIMIT 3;

LIMIT 3とすることで、先頭のデータから3件のみを取得することができます。

実行結果

idnameageaddress
1山田25東京都
2鈴木34神奈川県
3佐藤28北海道
usersテーブル

IDが1~3の3つのレコードだけ取得することができました。

なお、保存されているデータ以上の数をLIMITで指定してもエラーにはなりません。その場合は、全てのデータを取得することになります。

例えば、今回の例だと合計8個のデータが保存されています。LIMIT 100と指定すると8個全てのデータを取得するといった具合です。

OFFSET句を併用して取得開始位置を指定する

次に、OFFSET句を用いてデータ取得を開始する行を指定する場合を解説していきます。

検索クエリ

3番目のデータから5件のレコードを取得する

SQL
SELECT *
FROM users
LIMIT 5 OFFSET 3;

LIMIT 5を指定した後に、OFFSET 3を指定することで先頭から3番目のデータを除外することができます。

実行結果

idnameageaddress
4大野45大阪府
5小池56京都府
6近藤23東京都
7佐々木37千葉県
8宮田31福岡県
usersテーブル

先頭から3番目までのデータが除外されるため、4番目から5件のレコードを取得することができました。

OFFSETを使わない方法

実は、OFFSETを使わずに開始位置を指定する書き方もあります。

それが下記です。

SQL
SELECT カラム名
FROM テーブル名
LIMIT 除外行数, 取得するデータの数;

LIMITの後に除外行数を指定し、カンマ区切りで取得するデータの数を指定します。OFFSETを使う場合とは逆で、除外行数を先に指定することがポイントです。

個人的には明示的にOFFSETを書いた方が分かりやすいと思う派なので、OFFSETを書くことを推奨します。

ORDER BY句と併用する方法

ここまでは先頭からの行数を制限する方法を見てきましたが、最新のデータから数えて行数を制限したい場合も出てくるでしょう。

そのような場合はORDER BY句を併用することで実現できます。

検索クエリ

IDが最新のものから数えて3番目のデータから4件のデータを取得する

SQL
SELECT *
FROM users
ORDER BY id DESC
LIMIT 4 OFFSET 2;

下記の順番で考えます。

  1. ORDER BY id DESCによってデータを降順(大きいものから小さいもの)に並べ替える
  2. LIMIT 4で4件のレコードを取得
  3. OFFSET 2によって、2番目までのレコードを除外設定

実行結果

idnameageaddress
6近藤23東京都
5小池56京都府
4大野45大阪府
3佐藤28北海道
usersテーブル

降順に並べ替えた上で、3番目のデータから4件のレコードを取得することができました。

ORDER BY句については下記で詳しくまとめています。

【SQL】ORDER BY句を使ってレコードを並び替える方法(降順・昇順でソート)

内容のまとめ

  • LIMIT句を使うことで、SELECT文でデータを取得する際に取得するデータの件数を制限することができる
  • LIMIT 取得するデータの数とすることで、先頭から指定した数のデータを取得できる
  • LIMIT 取得するデータの数 OFFSET 除外行数とすることで、OFFSETで指定した行数までを除外できる
  • OFFSETは省略することができ、その場合はLIMIT 除外行数, 取得するデータの数という書き方になる
  • 最新のデータから数えて行数を制限したい場合は、ORDER BY句を併用する