MySQLのLIMIT(OFFSET付き)の使い方を完全解説!SQL初心者でもわかるデータ取得件数の制御方法
生徒
「MySQLでデータを表示するときに、全部表示されてしまうことがあるんですが、必要な分だけ表示する方法はあるんですか?」
先生
「あります。SQLにはLIMITという機能があり、表示する件数を制限できます。そしてOFFSETという機能を使うと、どこから表示するかも指定できます。」
生徒
「どこから表示するかというのはどういう意味ですか?」
先生
「例えば、名簿が100人分あるとします。最初の10人ではなく、11人目から10人だけ表示することもできます。そのときに使うのがOFFSETです。」
生徒
「つまり、途中のページだけ表示するような感じですか?」
先生
「その通りです。ネットショップや検索結果のページ分割でもよく使われています。今日はMySQLのLIMITとOFFSETの使い方を初心者向けに丁寧に説明していきます。」
1. MySQLのLIMIT(OFFSET付き)とは何か
MySQLのLIMITは、SQLでデータベースから取得するデータの件数を制限する機能です。データベースには大量のデータが保存されていることが多く、すべてを一度に表示すると画面が見にくくなったり、処理が遅くなることがあります。
そのような問題を防ぐために使われるのがLIMITです。LIMITを使うと「何件まで表示するか」を指定できます。
さらにOFFSETを使うと、「何件目から表示するか」を指定できます。つまり、途中からデータを表示できるようになります。
これは、インターネットの検索結果ページのように、1ページ目・2ページ目・3ページ目と分けて表示する「ページネーション」と呼ばれる仕組みでもよく使われています。
2. LIMITとOFFSETの基本構文
MySQLでLIMITとOFFSETを使うときの基本的なSQLの書き方を紹介します。
SELECT *
FROM テーブル名
LIMIT 件数 OFFSET 開始位置;
ここで出てきたOFFSETとは、「何件目から取得するか」を指定する数字です。
例えば、OFFSETが0なら最初のデータから取得します。OFFSETが5なら、6件目から取得することになります。
OFFSETは0から数えるという特徴があるので、最初は少し混乱するかもしれませんが、慣れるととても便利です。
3. LIMITで取得件数を制限するSQLの例
まずはLIMITだけを使って、データを何件まで取得するか指定してみます。
次のようなusersテーブルがあるとします。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 28 | misaki@example.com
5 | 伊藤健太 | 22 | kenta@example.com
6 | 渡辺直樹 | 35 | naoki@example.com
この中から最初の3件だけ取得してみます。
SELECT *
FROM users
LIMIT 3;
実行結果は次のようになります。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
このようにLIMITを使うと、表示されるデータの件数を簡単に制限できます。
4. OFFSETを使って途中からデータを取得する方法
次はOFFSETを使って、途中のデータから取得する方法を説明します。
先ほどと同じusersテーブルを使います。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 28 | misaki@example.com
5 | 伊藤健太 | 22 | kenta@example.com
6 | 渡辺直樹 | 35 | naoki@example.com
3件目から2件取得してみます。
SELECT *
FROM users
LIMIT 2 OFFSET 2;
OFFSETは0から数えるので、OFFSET2は3件目からになります。
id | name | age | email
---+------------+-----+-------------------
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 28 | misaki@example.com
このようにOFFSETを使うことで、途中からデータを取得できます。
5. LIMITとOFFSETを使ったページ表示のSQL
LIMITとOFFSETは、検索結果や一覧画面のページ分割でよく使われます。
例えば、1ページに3件ずつ表示する場合を考えてみます。
2ページ目を表示したい場合は、最初の3件をスキップする必要があります。
SELECT *
FROM users
LIMIT 3 OFFSET 3;
実行結果は次のようになります。
id | name | age | email
---+------------+-----+-------------------
4 | 高橋美咲 | 28 | misaki@example.com
5 | 伊藤健太 | 22 | kenta@example.com
6 | 渡辺直樹 | 35 | naoki@example.com
このように、LIMITとOFFSETを組み合わせることで、ページごとにデータを表示できます。
6. ORDER BYとLIMIT OFFSETを組み合わせる方法
MySQLではORDER BYとLIMIT OFFSETを組み合わせることもよくあります。
ORDER BYとは、データを並び替えるSQLの機能です。例えば年齢順に並び替えることができます。
年齢が若い順に並べて、最初の3件だけ取得してみます。
SELECT *
FROM users
ORDER BY age
LIMIT 3;
実行結果は次のようになります。
id | name | age | email
---+------------+-----+-------------------
2 | 佐藤花子 | 19 | hanako@example.com
5 | 伊藤健太 | 22 | kenta@example.com
1 | 山田太郎 | 25 | taro@example.com
ORDER BYで並び替えたあとにLIMITを使うことで、ランキング表示や人気順表示なども実現できます。
まとめ
MySQLのLIMITとOFFSETの重要ポイントを振り返ろう
ここまで、MySQLのLIMITとOFFSETを使ったSQLの書き方について学習してきました。MySQLのLIMITは、データベースから取得するデータの件数を制限するためのSQL構文であり、大量のデータを扱うデータベースアプリケーションでは非常に重要な機能です。
データベースのテーブルには多くのレコードが保存されていることがあり、すべてのデータを一度に表示すると画面が見にくくなったり、処理が重くなることがあります。そのような場合にMySQLのLIMITを使うことで、必要な件数だけを取得することができるようになります。
また、OFFSETを使うことで「どの位置からデータを取得するのか」を指定することができます。つまり、最初のデータからではなく途中のレコードからデータを取得することが可能になります。
このLIMITとOFFSETの組み合わせは、検索結果ページや商品一覧ページなどでよく使われるページネーション機能の実装でよく利用されます。たとえば、1ページに10件ずつデータを表示する場合、2ページ目はOFFSET10、3ページ目はOFFSET20のように指定することでページごとにデータを取得できます。
また、MySQLではORDER BYとLIMITを組み合わせて使用することも多く、データを並び替えてから必要な件数だけ取得するという処理もよく行われます。例えば、年齢順、登録順、人気順などのランキング表示を作る場合にもORDER BYとLIMITはとても重要なSQL構文になります。
このように、MySQLのLIMITとOFFSETはSQL初心者にとっても非常に実用的であり、データベース操作を効率よく行うために必ず覚えておきたいSQLテクニックの一つです。
LIMITとOFFSETを使ったデータ取得の復習
もう一度、MySQLのLIMITとOFFSETの基本的な使い方をSQLサンプルとともに復習してみましょう。ここでは、usersテーブルからデータを取得する例を使って確認していきます。
まずはSQLを実行する前のテーブルの状態です。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 28 | misaki@example.com
5 | 伊藤健太 | 22 | kenta@example.com
6 | 渡辺直樹 | 35 | naoki@example.com
7 | 小林真奈 | 24 | mana@example.com
まずはLIMITだけを使って、先頭から4件のデータを取得してみます。MySQLのLIMITを使うことで、SQLで取得するレコード数を制限することができます。
SELECT *
FROM users
LIMIT 4;
SQLを実行すると、次のような結果になります。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 28 | misaki@example.com
このように、LIMITを指定すると指定した件数までのデータだけ取得されるようになります。データベースのテーブルに何百件、何千件のレコードがあっても、必要な分だけ取得できるので処理効率も良くなります。
OFFSETを使った途中データ取得の復習
次はOFFSETを使って途中のデータから取得してみます。OFFSETは「何件スキップするか」を指定するSQLの機能です。
もう一度、SQL実行前のテーブルを確認しておきます。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 28 | misaki@example.com
5 | 伊藤健太 | 22 | kenta@example.com
6 | 渡辺直樹 | 35 | naoki@example.com
7 | 小林真奈 | 24 | mana@example.com
ここでは、最初の3件をスキップして、その後の2件を取得するSQLを書いてみます。
SELECT *
FROM users
LIMIT 2 OFFSET 3;
OFFSETは0から数えるため、OFFSET3は4件目のレコードから取得するという意味になります。SQLを実行すると次のような結果になります。
id | name | age | email
---+------------+-----+-------------------
4 | 高橋美咲 | 28 | misaki@example.com
5 | 伊藤健太 | 22 | kenta@example.com
このように、MySQLのLIMITとOFFSETを組み合わせることで、途中のレコードから指定件数のデータを取得することができます。これは検索結果ページや商品一覧ページなどのページ分割機能を作るときにとても重要なSQLの使い方になります。
ORDER BYとLIMITを組み合わせた実践的なSQL
実際のシステム開発では、ORDER BYとLIMITを組み合わせて使うことがとても多くなります。ORDER BYを使うことでデータを並び替えることができ、その結果の上位データだけ取得することが可能になります。
例えば、年齢が若い順に並び替えて上位3件だけ取得するSQLを書いてみます。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 28 | misaki@example.com
5 | 伊藤健太 | 22 | kenta@example.com
6 | 渡辺直樹 | 35 | naoki@example.com
7 | 小林真奈 | 24 | mana@example.com
SELECT *
FROM users
ORDER BY age
LIMIT 3;
id | name | age | email
---+------------+-----+-------------------
2 | 佐藤花子 | 19 | hanako@example.com
5 | 伊藤健太 | 22 | kenta@example.com
7 | 小林真奈 | 24 | mana@example.com
このように、ORDER BYとLIMITを組み合わせることでランキング表示や人気順表示などのデータ表示が簡単に実装できます。MySQLのSQL文では、このようなデータ取得の制御がとても重要になります。
MySQLのLIMITとOFFSETは、SQL初心者でも比較的理解しやすい機能ですが、実際のデータベースアプリケーションでは非常に頻繁に使われます。検索結果表示、ページネーション、ランキング表示、最新記事一覧など、さまざまな場面で活躍するSQL構文です。
データベースを扱うエンジニアやプログラミング初心者にとって、LIMITとOFFSETの理解はとても重要です。MySQLのSQL文を書くときには、ぜひ今回学習したLIMITとOFFSETの使い方を思い出して活用してみてください。
生徒
「MySQLのLIMITは、データベースから取得するデータ件数を制限するSQL機能でしたよね。SQLで必要なレコード数だけ取得できるのでとても便利だと感じました。」
先生
「その通りです。データベースには大量のレコードが保存されることが多いので、MySQLのLIMITを使って取得件数を制御することはとても重要です。」
生徒
「OFFSETを使うと途中のレコードから取得できるのも便利ですね。ページネーションの仕組みで使われる理由がよくわかりました。」
先生
「はい。MySQLのLIMITとOFFSETを組み合わせることで、検索結果一覧や商品一覧ページなどのページ分割表示を簡単に実装できます。」
生徒
「ORDER BYとLIMITを組み合わせるとランキング表示もできるんですよね。SQLの使い方がだんだん理解できてきました。」
先生
「とても良い理解です。MySQLのSQLではORDER BY、LIMIT、OFFSETを組み合わせて使う場面がとても多いので、今回学んだSQLの書き方は必ず役に立ちます。」
生徒
「これからデータベースを使ったプログラミングをするときは、SQLでデータ取得件数を制御することを意識してみます。」
先生
「ぜひ実際にSQLを書いて練習してみてください。MySQLのLIMITとOFFSETは、データベース操作を理解するための大切な基本技術です。」