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 ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|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」をお願いいたします。
本文下部へ