SQL│LIMITとOFFSETで抽出件数や開始位置を指定する

今回は、SQLのSELECT区で結果を抽出する際に、データの抽出件数や開始位置を指定することができるLIMITとOFFSETについて説明します。

一般にデータベースには大量のデータが格納されています。

それらを抽出する際にSELECT~FROMだけのSQL文を実行すると、テーブルに格納されているすべてのデータが抽出されてしまい、システムへの負担やデータ加工の手間などが発生してしまいます。

テーブルからデータを抽出する際には、必要な件数を指定するLIMIT開始位置を指定するOFFSETを使うことで、合理的なデータ抽出ができるようになります。

この記事では、LIMITとOFFSETの基本文法と実例を紹介します。

目次

抽出件数を指定するLIMIT

この章では、テーブルからの抽出件数を指定するためのLIMIT区の基本的な書き方を説明します。

基本文法

抽出件数を指定する
SELECT * FROM テーブル名 LIMIT 抽出件数;

実際のSQL

  • テーブル名・・・・Vegetable
  • 抽出件数・・・3件

たとえば、テーブル[Vegetable]からデータを抽出する際、件数を3件に指定する場合には、下記のようにSQL文を記述します。

SELECT * FROM Vegetable LIMIT 3;

MySQLのLIMITの実例

SELECT * FROM Vegetable LIMIT 3;

PostgreSQLのLIMITの実例

SELECT * FROM Vegetable LIMIT 3;

データの開始位置も指定するOFFSET

前章のLIMIT区を使う場合には、データの開始位置を指定するOFFSETと併用することもあります。

TOP3やTOP5のデータを抽出するのであれば開始位置を指定する必要はありませんが、中間データを抽出したい場合などです。

その場合、LIMITにOFFSET区を加えることで、抽出件数と開始位置を同時に指定することができます。

データの並び順

なお、RDBMSではデータの並び順を保証していませんので、実際にLIMITやOFFSETを使う場合には、データの並び順を制御するORDER BYも組み合わせて使うことが普通です。

LIMITとOFFSETにORDER BYを組み合わせる場合のSQL文の書き方については、後述します。

基本文法

データの開始位置を指定する
SELECT * FROM テーブル名 LIMIT 抽出件数 OFFSET 開始位置;

SQL文の解説

OFFSETに続く開始位置は、実際にはスキップする件数を指定します。たとえば、下記のようなテーブル(Japan_rank)から4件目以降のデータを抽出したい場合のSQL文は、次のように記述します。

  • 東京都
  • 神奈川県
  • 大阪府
  • 愛知県
  • 埼玉県
  • 千葉県
SELECT * FROM Japan_rank limit 2 OFFSET 3;

これは、上位3件を除き4件目のデータから抽出するという命令になります。

MySQLのOFFSETの実例

SELECT * FROM Vegetable LIMIT 2 OFFSET 3;

PostgreSQLのOFFSETの実例

SELECT * FROM Vegetable LIMIT 2 OFFSET 3;

ORDER BYとの組み合わせ

最後に、前章までに説明したLIMITとOFFSETに、データの並び順を制御するORDER BYを組み合わせるSQL文について、説明します。

ORDER BY、LIMIT、OFFSET

  • テーブル名・・・・Vegetable
  • 並び順のキー・・id
  • 抽出件数・・・2件
  • 開始位置・・4件目以降を抽出
SELECT * FROM Vegetable ORDER BY id LIMIT 2 OFFSET 3;

上記のSQL文を実行すると、id列で昇順にソートされたデータを上位4件目から2件だけ抽出します。

あとがき

今回は、テーブルからSQL文でデータを抽出する際に、抽出件数や開始位置をLIMITとOFSSETを使って指定する方法について、記事にしました。

データベースのテーブルからデータを抽出するときには、目的に沿ったSQL文を記述するのが基本です。たとえば、レコード件数が10万件を超過するテーブルから、件数を指定せずにすべてのデータを抽出するのは合理的ではありません。

ORDER BYやLIMIT、OFFSETを使って効率的にSQL文を実行しましょう。

目次