取得するデータの数と開始位置を指定(LIMIT句, OFFSET句)

テーブルからデータを取得するときに LIMIT 句を使用することで取得するデータの数を指定することができます。また合わせて OFFSET 句を使用するとどの位置からデータを取得するのかを指定することができます。ここでは SQLite で LIMIT 句および OFFSET 句を使って取得するデータの数と位置を指定する方法について解説します。

(Last modified: )

LIMIT句を使って取得するデータの数を指定する

LIMIT 句を使用することで取得するデータの数を指定することができます。書式は次の通りです。

SELECT カラム名, ... FROM テーブル名 LIMIT 行数;

LIMIT句の後に取得する行数を指定します。行数が指定された場合には先頭のデータから指定した行数のデータだけを取得します。

なお格納されているデータの数よりも多い行数を指定してもエラーとはなりません。その場合は全てのデータを取得します。よって例えば行数として 100 を指定すれば、格納されているデータが 100 未満の場合は全てのデータ、 100 以上格納されている場合は 100 個のデータを取得します。

----

では実際に試してみます。次のようなテーブルを作成しました。

create table user(id integer, name text, address text);

LIMIT句を使って取得するデータの数を指定する(1)

INSERT 文を使ってテーブルにデータをいくつか格納しておきます。

insert into user values(1, 'Hanada', 'Tokyo');
insert into user values(2, 'Sano', 'Osaka');
insert into user values(3, 'Tanaka', 'Tokyo');
insert into user values(4, 'Uede', 'Nagoya');
insert into user values(5, 'Itou', 'Sapporo');
insert into user values(6, 'Tsuda', 'Osaka');
insert into user values(7, 'Okamoto', 'Kyoto');
insert into user values(8, 'Endou', 'Nagoya');

LIMIT句を使って取得するデータの数を指定する(2)

行数を指定せずにデータを取得した場合にはテーブルに格納されているすべてのデータを取得します。

select * from user;

LIMIT句を使って取得するデータの数を指定する(3)

それでは LIMIT 句を使って取得するデータの行数を指定してみます。例として4つのデータを取得します。

select * from user limit 4;

LIMIT句を使って取得するデータの数を指定する(4)

先頭のデータから4つのデータを取得することができました。

OFFSET句を使って取得を開始する位置の指定する

LIMIT 句を指定した場合は先頭のデータから指定した数のデータを取得しますが、先頭からではなく指定した位置からデータを取得することもできます。データの取得を行う最初の位置を指定するには OFFSET 句を使用します。

OFFSET句を使用する場合の書式は次のどちらかの書式を使用します。

SELECT カラム名, ... FROM テーブル名 LIMIT 行数 OFFSET 開始位置;

SELECT カラム名, ... FROM テーブル名 LIMIT 開始位置, 行数;

LIMIT 句の後に取得するデータの行数、そして OFFSET 句の後にデータを取得する開始位置を指定します。OFFSET 句を使用しない場合はまず開始位置を指定しその後に取得する行数を指定することに注意して下さい。

注意する点として、例えば OFFSET に 4 を指定した場合、最初から 4 番目までのデータを飛ばして 5 番目のデータから取得を行います。4 番目のデータから取得を開始するわけではないことに注意して下さい。また LIMIT 句を省略して OFFSET 句だけを記述することはできません。

----

では実際に試してみます。先ほど使用したテーブルを再度使います。特に指定を行わずにデータを取得した場合は次のようになります。

select * from user;

OFFSET句を使って取得を開始する位置の指定する(1)

OFFSET 句を使った書式で5番目のデータ(引数としては4を指定)から3つのデータを取得してみます。

select * from user limit 3 offset 4;

OFFSET句を使って取得を開始する位置の指定する(2)

同じように5番目から3つのデータを取得する時に OFFSET 句を使用しない別の書式を使う場合は次のように実行します。

select * from user limit 4, 3;

OFFSET句を使って取得を開始する位置の指定する(3)

どちらの場合も指定した位置から指定した数のデータを取得することができました。

ORDER BY句を使って並べ替えた上で取得する行数を指定する

SQLite ではデータを取得する時に ORDER BY 句を使って指定したカラムの値で並び替えを行うことができます。(詳細については「取得したデータをカラムの値でソート(ORDER BY句)」を参照して下さい)。

ORDER BY 句と LIMIT 句が同時に記述された場合、まず ORDER BY 句で並び替えを行った上で LIMIT 句で指定された数のデータを取得します。

では実際に試してみます。先ほど使用したテーブルを再度使います。このテーブルから address カラムの値で並び替えしてからデータを取得してみます。

select * from user order by address;

ORDER BY句を使って並べ替えた上で取得する行数を指定する(1)

次に並び替えを行った上で LIMIT 句を使って5つのデータを取得してみます。

select * from user order by address limit 5;

ORDER BY句を使って並べ替えた上で取得する行数を指定する(2)

並び替えされたデータの中から5つのデータを取得することができました。このように ORDER BY 句と LIMIT 句を組み合わせることで、まず並び替えを行った上で任意の数のデータを取得することができます。

-- --

LIMIT 句を使用して取得するデータの数を設定する方法について解説します。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。