Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLでデータを取得する際、全てのデータが必要なわけではなく、何件分のデータが欲しいといったケースは意外と多いものです。

今回はSQLでデータの取得件数を指定する際に利用するLIMIT句の使い方について、サンプルを交えながらご紹介していきたいと思います。

ポテパンダの一言メモ

LIMIT句はMySQLの記述方法で、データベース毎に取得件数の指定方法は異なります。
ご利用のデータベースの仕様を確認し、データベース仕様に準じた記述で実装してください。

SQLでデータの取得件数を指定する方法


SQLでデータの取得件数を指定するLIMIT句の基本的な使い方からご紹介していきます。

基本構文

LIMIT句はSQL文の末尾に記載します。

SELECT カラム名[, カラム名, ...]
FROM テーブル名
[WHERE 条件式]
LIMIT 件数;

サンプル

今回のサンプルでは「user」テーブルを作成し、下記のデータを格納しておきました。

user

+------+--------------------+------+
| id   | name               | age  |
+------+--------------------+------+
|    1 | 山田太郎            |   30 |
|    2 | 山田花子            |   25 |
|    3 | 鈴木次郎            |   20 |
|    4 | 田中一              |   40 |
|    5 | 田中ひかり          |   19 |
|    6 | 遠藤とおる          |   39 |
|    7 | 木田陽子            |   26 |
|    8 | 浜田みく            |   31 |
|    9 | 大谷こうすけ         |   56 |
|   10 | 坂本雅人            |   26 |
+------+--------------------+------+

最初のサンプルではシンプルにLIMIT句で5件のデータだけを取得してみましょう。

mysql> select * from user limit 5;
+------+-----------------+------+
| id   | name            | age  |
+------+-----------------+------+
|    1 | 山田太郎         |   30 |
|    2 | 山田花子         |   25 |
|    3 | 鈴木次郎         |   20 |
|    4 | 田中一           |   40 |
|    5 | 田中ひかり       |   19 |
+------+-----------------+------+
5 rows in set (0.02 sec)

idの順番に5件のデータが取得出来ましたね。

ポテパンダの一言メモ

ただし、自分自身で並び順を指定したわけではないので、必ずid順に取得されるとの保証があるわけではありません。

SQLを並び替えて取得件数を指定してみよう


では自分が意図したデータの並びで取得件数を指定するために「ORDER BY」と組み合わせてデータを取得してみましょう。

idの降順で取得件数を指定する

最初のサンプルではidの降順に並び替えを行った上で5件のデータを取得しています。

mysql> select * from user order by id desc limit 5;
+------+--------------------+------+
| id   | name               | age  |
+------+--------------------+------+
|   10 | 坂本雅人            |   26 |
|    9 | 大谷こうすけ         |   56 |
|    8 | 浜田みく            |   31 |
|    7 | 木田陽子            |   26 |
|    6 | 遠藤とおる          |   39 |
+------+--------------------+------+
5 rows in set (0.04 sec)

年齢の若い順で取得件数を指定する

今回のサンプルでは少し複雑な条件として、WHERE句で20代以上のデータに絞り込みを行った上で、年齢が若い順に3人のデータを取得しています。

mysql> select * from user where age >= 20 order by age limit 3;
+------+--------------+------+
| id   | name         | age  |
+------+--------------+------+
|    3 | 鈴木次郎      |   20 |
|    2 | 山田花子      |   25 |
|   10 | 坂本雅人      |   26 |
+------+--------------+------+
3 rows in set (0.01 sec)

このようにLIMIT句は、WHERE句による条件抽出やORDER BYの並び替えが全て完了した後に実行されます。

取得開始位置を指定するSQLを書いてみよう


SQLで取得件数を指定する際、取得開始位置を指定したいといった要望も多いものです。

例えば30位までのランキングがテーブルに格納されていて、11位から20位までを取得したいような意図ですね。

「OFFSET句」を利用する方法と、LIMIT句のオプションとして取得開始位置を指定する省略記法の2種類で実現することが可能です。

基本構文

OFFSET句を記述する方法から確認していきましょう。

SELECT カラム名[, カラム名, ...]
FROM テーブル名
[WHERE 条件式]
LIMIT 件数
OFFSET 開始位置;

LIMIT句の後にOFFSET句で開始位置を設定します。

開始位置は1件目から取得する場合「0」となり、11件目のデータから取得したい場合は「10」と指定します。

ポテパンダの一言メモ

開始位置を指定しなかった場合のデフォルトは「0」なので、1件目から順番に取得する設定となります。

つぎにOFFSET句を利用しない記述方法です。

SELECT カラム名[, カラム名, ...]
FROM テーブル名
[WHERE 条件式]
LIMIT 開始位置, 取得件数;

開始位置と取得件数をカンマで区切ることで、OFFSET句を利用しない記述方法が可能です。

注意しておきたいポイントが、OFFSET句を利用する場合とは反対に開始位置の指定が、取得件数の指定より前に切り替わります。

サンプル

では実際にサンプルデータの7件目から9件目のデータを取得するサンプルで確認してみましょう。

mysql> select * from user limit 3 offset 6;
+------+--------------------+------+
| id   | name               | age  |
+------+--------------------+------+
|    7 | 木田陽子            |   26 |
|    8 | 浜田みく            |   31 |
|    9 | 大谷こうすけ         |   56 |
+------+--------------------+------+
3 rows in set (0.08 sec)

OFFSET句を利用しない書き方でも試しておきましょう。

mysql> select * from user limit 6, 3;
+------+--------------------+------+
| id   | name               | age  |
+------+--------------------+------+
|    7 | 木田陽子            |   26 |
|    8 | 浜田みく            |   31 |
|    9 | 大谷こうすけ         |   56 |
+------+--------------------+------+
3 rows in set (0.00 sec)

OFFSET句を利用した場合と同じ結果が取得出来ていますね。

さいごに:SQLの取得件数を指定して必要なデータだけを抽出しよう


本記事では、SQLの取得件数を指定するLIMIT句の使い方についてご紹介してきました。

LIMIT句を利用してデータの取得件数を指定することで、テーブルから不要なデータごと取得するよりもSQLパフォーマンスの向上が期待出来ます。

一方で、OFFSET句などを利用して取得開始位置を指定する場合には、使い方によって処理が遅くなってしまうケースもありますので、WHERE句での条件指定などとうまく組み合わせながら、最適なSQL文構築を模索してみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。