SQL入門
取得行数を限定するLIMIT句

SQLの初心者向け入門解説、VBAからデータベースを扱うためのSQLを解説
公開日:2019-12-21 最終更新日:2019-12-21

取得行数を限定するLIMIT句


SELECT文の結果は対象行が全て出力されますが、
「先頭の何件だけ取得したい」このような時に使うのがLIMIT句になります。
さらにOFFSET句を合わせて使う事で、途中の何行目から何件という指定もできます。


LIMIT句が使えるデータベースは限られています。

LIMIT句が使える代表的なデータベースとしては、PostgreSQL、MySql、SQLite
ORACLEではROWNUMを使います。
SQL ServerではROW_NUMBER()を使います。
また、SQL ServerおよびAccessではTOP句が使えます。


使用するテーブル定義は以下になります。

全テーブル定義とテーブル自動作成VBA
・テーブル:m_customer ・テーブル:m_item ・テーブル:t_sales ・テーブル自動作成

LIMIT句の構文

SELECT カラム名 … FROM テーブル名 LIMIT 行数
SELECT結果の先頭から指定の行数だけが取得されます。
SORT BYが指定されている場合は、ソート後に適用されます。

SELECT カラム名 … FROM テーブル名 LIMIT 行数 OFFSET 除外行数
SELECT カラム名 … FROM テーブル名 LIMIT 除外行数, 行数
SELECT結果の除外行数の次の行から指定した行数だけが取得されます。
たとえば、除外行数に10を指定した場合は、11行目から取得されます。
SORT BYが指定されている場合は、ソート後に適用されます。

後者の場合は指定順に注意してください。
ただし、OFFSET句を指定したほうが読みやすいと思いますので、OFFSET句を使ったほうが良いと思います。

LIMIT句の使用例

先頭の10件だけを取得

SELECT code,SUM(item_count * item_price) AS sum_amount
  FROM t_sales
  GROUP BY code
  LIMIT 10

21行目から10件を取得

SELECT code,SUM(item_count * item_price) AS sum_amount
  FROM t_sales
  GROUP BY code
  LIMIT 20 OFFSET 10

金額上位の10件を取得

SELECT code,SUM(item_count * item_price) AS sum_amount
  FROM t_sales
  GROUP BY code
  ORDER BY SUM(item_count * item_price) DESC
  LIMIT 10

金額下位の10件を取得

SELECT code,SUM(item_count * item_price) AS sum_amount
  FROM t_sales
  GROUP BY code
  ORDER BY SUM(item_count * item_price) ASC
  LIMIT 10

金額下位10件を降順で取得

金額で降順に並べた時の最後の10件を取得する場合です。

SELECT code,sum_amount
  FROM (SELECT code,SUM(item_count * item_price) AS sum_amount
          FROM t_sales
          GROUP BY code
          ORDER BY SUM(item_count * item_price) ASC
          LIMIT 10)
  ORDER BY sum_amount DESC
昇順にして先頭10件を取得後に降順に並べ替え直しています。
では、あえて、OFFSET句を使って書いてみましょう。

SELECT code,SUM(item_count * item_price) AS sum_amount
  FROM t_sales
  GROUP BY code
  ORDER BY SUM(item_count * item_price) DESC
  LIMIT 10
  OFFSET (SELECT COUNT(*) - 10 FROM (SELECT * FROM t_sales GROUP BY code))
GROUP化→行数取得→最後の10件の行位置計算→OFFSET句に指定
さらに、WITH句(共通テーブル式)を使って書き直してみましょう。

WITH GR AS
  (SELECT code,SUM(item_count * item_price) AS sum_amount
     FROM t_sales GROUP BY code)
SELECT *
  FROM GR
  ORDER BY sum_amount
  LIMIT 10
  OFFSET (SELECT COUNT(*) - 10 FROM GR)
大分すっきりしたのではないでしょうか。
このくらいのサブクエリやWITHがすんなり読めて書ければ、大概の事は自由にSQLを書けるものと思います。
サブクエリの練習をかねて、あえて題材にしてみました。

LIMIT句、OFFSET句の最後に

LIMIT句自体は特段に難しいことはありませんので、使う時に悩むようなことは無いでしょう。
ただし、これを知らないと必要となった場面では大変困ってしまいますので、必ず覚えておきましょう。



同じテーマ「SQL入門」の記事

サブクエリ(副問合せ)
サブクエリのネストとSQLコメント&整形
WITH句(共通テーブル式)
取得行数を限定するLIMIT句
分析関数(OVER句,WINDOW句)
「ADO + VBA」でSQLを実行するときのVBAサンプル
SQL基礎問題1:最大在庫数を持つ製品の在庫金額
SQL基礎問題2:文字列「-nn-」のnnが偶数のみ抽出
SQL基礎問題3:文字列の一部をキーにして集計
SQL基礎問題4:2つのテーブルの不一致を抽出
SQL基礎問題5:複数のマスタテーブルの結合


新着記事NEW ・・・新着記事一覧を見る

ITエンジニアのための経理・会計・簿記入門|エクセル雑感(2026-09-12)
「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)
M言語入門:Power Queryのコードを読むための基礎知識|Power Query(M言語)入門(2026-09-09)
Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方|エクセル関数応用(2026-09-08)
スピルとVBA(Formula2とスピル範囲の取得)|VBA入門(2026-09-08)
「Withの功罪」:コードを読みやすくする強力な道具と、その落とし穴|VBA技術解説(2026-09-03)
可変長配列をVSTACKする4つの方法|REDUCE・Thunk・チャンク・再帰分割|エクセル関数応用(2026-09-01)
Excel表とMarkdownテーブルを相互変換する数式|エクセル関数応用(2026-08-24)
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化|エクセル関数応用(2026-08-14)
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序|エクセル関数応用(2026-08-12)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ