データを◯件だけ取得したいといった具合に、取得するデータの数を制限したい場合はLIMIT句を使います。
本記事ではLIMIT句・OFFSET句の使い方、またORDER BY句を併用する方法まで具体例を交えて解説します。
目次
LIMIT句とは
LIMIT句を使うことで、SELECT文でデータを取得する際に取得するデータの件数を制限することができます。例えば、最大10件のデータまで取得したいといった場合にLIMIT句を使うと実現できます。
基本の使い方
LIMIT句の基本構文は下記です。
SELECT カラム名
FROM テーブル名
LIMIT 取得するデータの数;
LIMIT
の後に取得したいデータの行数を数値で記載します。
また、何行目から10件のデータを取得するといった具合に、取得するデータの開始位置を指定したい場合もあります。このような場合にはOFFSET句を併用することで実現できます。
OFFSET句を使った場合の基本構文が下記です。
SELECT カラム名
FROM テーブル名
LIMIT 取得するデータの数 OFFSET 除外行数;
LIMIT 取得するデータの数
を指定した後にOFFSET 除外行数
を指定することで、先頭からOFFSET
で指定した行番号までを除外することができます。従って、OFFSET
で指定した行のプラス一行目から取得を開始できるのです。
それでは、具体例を見ていきましょう。
サンプルデータ
下記のとおり、usersテーブルを用意します。
id | name | age | address |
---|---|---|---|
1 | 山田 | 25 | 東京都 |
2 | 鈴木 | 34 | 神奈川県 |
3 | 佐藤 | 28 | 北海道 |
4 | 大野 | 45 | 大阪府 |
5 | 小池 | 56 | 京都府 |
6 | 近藤 | 23 | 東京都 |
7 | 佐々木 | 37 | 千葉県 |
8 | 宮田 | 31 | 福岡県 |
LIMIT句を使って取得するデータの数を制限する
LIMIT句を使って取得する行数を制限する方法を解説していきます。
検索クエリ
レコードを3件だけ取得する
SELECT *
FROM users
LIMIT 3;
LIMIT 3
とすることで、先頭のデータから3件のみを取得することができます。
実行結果
id | name | age | address |
---|---|---|---|
1 | 山田 | 25 | 東京都 |
2 | 鈴木 | 34 | 神奈川県 |
3 | 佐藤 | 28 | 北海道 |
IDが1~3の3つのレコードだけ取得することができました。
なお、保存されているデータ以上の数をLIMIT
で指定してもエラーにはなりません。その場合は、全てのデータを取得することになります。
例えば、今回の例だと合計8個のデータが保存されています。LIMIT 100
と指定すると8個全てのデータを取得するといった具合です。
OFFSET句を併用して取得開始位置を指定する
次に、OFFSET句を用いてデータ取得を開始する行を指定する場合を解説していきます。
検索クエリ
3番目のデータから5件のレコードを取得する
SELECT *
FROM users
LIMIT 5 OFFSET 3;
LIMIT 5
を指定した後に、OFFSET 3
を指定することで先頭から3番目のデータを除外することができます。
実行結果
id | name | age | address |
---|---|---|---|
4 | 大野 | 45 | 大阪府 |
5 | 小池 | 56 | 京都府 |
6 | 近藤 | 23 | 東京都 |
7 | 佐々木 | 37 | 千葉県 |
8 | 宮田 | 31 | 福岡県 |
先頭から3番目までのデータが除外されるため、4番目から5件のレコードを取得することができました。
OFFSETを使わない方法
実は、OFFSETを使わずに開始位置を指定する書き方もあります。
それが下記です。
SELECT カラム名
FROM テーブル名
LIMIT 除外行数, 取得するデータの数;
LIMIT
の後に除外行数
を指定し、カンマ区切りで取得するデータの数
を指定します。OFFSETを使う場合とは逆で、除外行数を先に指定することがポイントです。
個人的には明示的にOFFSETを書いた方が分かりやすいと思う派なので、OFFSETを書くことを推奨します。
ORDER BY句と併用する方法
ここまでは先頭からの行数を制限する方法を見てきましたが、最新のデータから数えて行数を制限したい場合も出てくるでしょう。
そのような場合はORDER BY句を併用することで実現できます。
検索クエリ
IDが最新のものから数えて3番目のデータから4件のデータを取得する
SELECT *
FROM users
ORDER BY id DESC
LIMIT 4 OFFSET 2;
下記の順番で考えます。
ORDER BY id DESC
によってデータを降順(大きいものから小さいもの)に並べ替えるLIMIT 4
で4件のレコードを取得OFFSET 2
によって、2番目までのレコードを除外設定
実行結果
id | name | age | address |
---|---|---|---|
6 | 近藤 | 23 | 東京都 |
5 | 小池 | 56 | 京都府 |
4 | 大野 | 45 | 大阪府 |
3 | 佐藤 | 28 | 北海道 |
降順に並べ替えた上で、3番目のデータから4件のレコードを取得することができました。
ORDER BY句については下記で詳しくまとめています。
【SQL】ORDER BY句を使ってレコードを並び替える方法(降順・昇順でソート)内容のまとめ
- LIMIT句を使うことで、SELECT文でデータを取得する際に取得するデータの件数を制限することができる
LIMIT 取得するデータの数
とすることで、先頭から指定した数のデータを取得できるLIMIT 取得するデータの数 OFFSET 除外行数
とすることで、OFFSET
で指定した行数までを除外できるOFFSET
は省略することができ、その場合はLIMIT 除外行数, 取得するデータの数
という書き方になる- 最新のデータから数えて行数を制限したい場合は、ORDER BY句を併用する