SQLのLIMIT句は取得するデータの件数を制限するクエリです。データベースにたくさんのデータが格納されていて、なおかつデータを抽出する際に全部のデータではなく一部のデータのみを抽出する場合は、LIMIT句を用いて抽出する件数を指定できます。本記事では、SQLのSELECT句でデータを抽出する際に、データを抽出する件数を指定する「LIMIT句」と抽出開始位置を指定する「OFFSET句」について解説します。
SQLのLIMIT句とは
SQLのLIMIT句とは、クエリによる出力結果の行数を制限するクエリです。たとえば、データを抽出するSELECT句とLIMIT句を併用することでデータベースから抽出するデータの件数を制限できます。
【サンプルテーブル】
「LIMIT」句の具体的な使い方を解説していくにあたって、サンプルとして「テスト(test)」テーブルを用意しました。
「テスト(test)」テーブル
ID(id) | 氏名(name) | 性別(gender) | 点数(point) |
1001 | 秋山 | 男 | 80 |
1002 | 久保田 | 女 | 100 |
1003 | 佐々木 | 女 | 65 |
1004 | 佐藤 | 男 | 75 |
1005 | 鈴木 | 女 | 60 |
1006 | 田中 | 男 | 90 |
1007 | 土屋 | 女 | 55 |
LIMIT句の基本構文
【基本構文】
SELECT カラム名 FROM テーブル名 LIMIT 抽出する行数
たとえば、1000件のデータが格納されていて、そのうち100件を抽出する場合には「LIMIT 100」と書きます。
また、パラメータに抽出開始位置を指定することもでき、先頭からではなく指定した位置からデータを抽出できます。
SELECT カラム名 FROM テーブル名 LIMIT 抽出開始位置,抽出する行数
開始位置を指定するOFFSET句との併用
LIMIT句に抽出を開始する位置を指定する「OFFSET句」を併用することもあります。OFFSET句は、特定の開始位置(オフセット)からレコードを抽出するのに用いられるクエリで、主にページングやデータの部分的な抽出などの用途に使用されます。開始位置の数字に注意する必要があります。デフォルトは0で、たとえば、3行目から取得する場合は、2を指定します。
SELECT カラム名 FROM テーブル名 LIMIT 抽出する行数 OFFSET 抽出開始位置
たとえば、1000件のデータが格納されていて、「LIMIT 100 OFFSET 200」と書くと、そのうち201件目から100件を抽出できます。
出力結果をソートするORDER BY句との併用
何も指定しないとSELECT文で抽出する結果の順序は何も保証されません。そこで、ORDER BY句で並び順を指定することで抽出する並び順を指定することができます。LIMIT句はORDER BY句と組み合わせて使用する場合がほとんどです。
たとえば、ID昇順で201~300件のデータを取得する場合は次のように書きます。
SELECT カラム名 FROM テーブル名 ORDER BY 並び替えるカラム名 DESC LIMIT 100 OFFSET 200
ORDER BY句の使い方についてはこちらで詳しく解説しています。
サンプルテーブルを用いて、点数が高い順に3位から3人を抽出します。
【実行クエリ】
SELECT name,point FROM test ORDER BY point DESC LIMIT 3 OFFSET 2
【実行結果】
氏名(name) | 点数(point) |
秋山 | 80 |
佐藤 | 75 |
佐々木 | 65 |
今回の場合、OFFSETは「3」ではなく「2」です。間違えやすいので注意しましょう。
WHERE句との併用
条件文を付け加えてみます。
サンプルテーブルを用いて、女子生徒のうち点数が低い順に2位から2人を抽出します。
【実行クエリ】
SELECT * FROM test WHERE gender='女' ORDER BY point LIMIT 2 OFFSET 1
【実行結果】
ID(id) | 氏名(name) | 性別(gender) | 点数(point) |
1005 | 鈴木 | 女 | 60 |
1003 | 佐々木 | 女 | 65 |
WHERE句の使い方については以下のページで詳しく解説していますので、こちらもぜひご覧ください!
LIMIT/OFFSET句の応用
LIMIT句とOFFSET句に関しては、SELECT文のほかにもDELETE文やUPDATE文にも利用できます。
実際にDELETE文やUPDATE文とLIMIT句やOFFSET句を組み合わせる方法について解説していきます。
≫まずは簡単60秒で無料お問い合わせから≪
DELETE文とLIMIT句を組み合わせて一部のデータを削除する
DELETE文とLIMIT句やOFFSET句を組み合わせることで、削除するデータの件数を指定することができます。
削除する件数をLIMIT句で制限することで、クエリを誤ってテーブル内のデータを全て削除してしまった……というような事故を未然に防ぐことができます。
【基本構文】
DELETE FROM テーブル名 WHERE 条件式 ORDER BY ソート順 LIMIT 削除する件数 OFFSET 削除開始位置;
基本的な構文はSELECT文で使用する場合とほとんど同じです。
testテーブルから点数の低い順に2人分のデータを削除してみましょう。
【実行クエリ】
DELETE FROM test ORDER BY point ASC LIMIT 2;
SELECT * FROM test;
【実行結果】
id | name | gender | point |
---|---|---|---|
1001 | 秋山 | 男 | 80 |
1002 | 久保田 | 女 | 100 |
1003 | 佐々木 | 女 | 65 |
1004 | 佐藤 | 男 | 75 |
1006 | 田中 | 男 | 90 |
UPDATE文とLIMIT句を組み合わせてテーブルの更新を絞り込む
UPDATE文を使用する場合にLIMIT句と組み合わせることで、テーブル内の更新するデータの件数を制限することができます。
これにより、テーブル内の全てのデータを誤って更新してしまうというようなアクシデントを防ぐことができます。
【基本構文】
UPDATE テーブル名 SET 指定する値 WHERE 条件式 ORDER BY ソート順 LIMIT 更新件数 OFFSET 更新開始位置
testテーブルを使用して、点数が高い3人の名前を”トップ3″に変更するクエリを実行してみましょう。
【実行クエリ】
UPDATE test SET name = 'トップ3' ORDER BY point DESC LIMIT 3;
select * from test;
【実行結果】
id | name | gender | point |
---|---|---|---|
1001 | トップ3 | 男 | 80 |
1002 | トップ3 | 女 | 100 |
1003 | 佐々木 | 女 | 65 |
1004 | 佐藤 | 男 | 75 |
1005 | 鈴木 | 女 | 60 |
1006 | トップ3 | 男 | 90 |
1007 | 土屋 | 女 | 55 |
LIMIT句を使用する際の注意点
LIMIT句/OFFSET句は便利な機能ですが、標準SQL規格で定められた仕様ではないため、全てのRDBMSで利用できるわけではありません。
たとえば、Microsoft SQL ServerではLIMIT句ではなくTOP修飾子やOFFSET/FETCH NEXT句を使用します。また、Oracleでは、ROWNUM擬似列やFETCH FIRST句を使います。
このように、データベース管理システムによって、LIMIT句と同様の機能を持つ構文が異なるので、使用するシステムに応じて適切なクエリを記述する必要があります。
SQL関連記事
- RDBを操作するデータベース言語「SQL」とは?
- RDB以外のデータベース管理システム「NoSQL」とは?
- RDB管理システム「MySQL」とは?
- RDB管理システム「PostgreSQL」とは?
- RDB管理システム「SQL Server」とは?
- RDB管理システム「SQLite」とは?
- ブラウザ上でMySQLを管理できる「phpMyAdmin」とは?
- データを抽出する「SELECT」文
- データを追加する「INSERT」文
- データを削除する「DELETE」文
- データを更新する「UPDATE」文
- 抽出条件を指定する「WHERE」句
- 抽出条件を指定する「HAVING」句
- 複数の抽出条件をまとめる「IN」句
- 重複レコードを除外する「DISTINCT」
- 抽出範囲を指定する「BETWEEN」演算子
- 抽出条件を満たすレコードの存在の有無を調べる「EXISTS」句
- レコード件数を取得する集計関数「COUNT」関数
- レコードをグループ化する「GROUP BY」句
- 抽出結果を並び替える「ORDER BY」句
- テーブル間のデータを結合する「JOIN」句
- 内部結合「INNER JOIN」句
- 抽出結果を統合して表示する「UNION」句
- データの曖昧検索「LIKE」句
- 条件分岐処理「CASE」式
- 文字列の前後の空白を削除する「TRIM」関数
- 「NULL」の扱い方
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。
- 2024.06.14
- Other
Author:鷺坂りな @TechMania編集部 投稿一覧
Otherカテゴリの最新記事
-
- 2025.02.14
【SQL】TRIM関数で文字列の前後の空白を削除する
-
- 2025.02.07
【Linux入門】ZIP形式でファイル・ディレクトリを圧縮する
-
- 2025.01.20
【JavaScript入門】getElementByIdの使い方をわかりやすく徹底解説
-
- 2025.01.20
【VBA】Format関数で日付や数値をフォーマットする
-
- 2025.01.17
【VBA入門】Variant型の使い方とは?Variant型のメリット・注意点も詳しく解説
-
- 2025.01.10
- programming, 未経験, 開発,
【2025最新】おすすめのプログラミング言語ランキングTOP10!各言語の特徴や難易度も徹底解説