取得するデータの数と開始位置を指定

広告

データを取得する時、WHERE句などを指定した場合でも条件に一致する全てのデータを取得しますが行数を指定して取得することもできます。ここではLIMIT句を使って取得するデータの行数を指定する方法、そしてどの位置からデータを取得するのかを指定するOFFSET句の使い方について解説します。

1.取得する行数を指定
2.取得を開始する位置を指定
3.並べ替えた上で取得する行数を指定

データの行数を指定するLIMIT句を使用する場合の書式は次の通りです。

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

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

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

----

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

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

p10-1

このテーブルにはいくつかのデータが格納されており、そのままデータを取得した場合には次のように全てのデータ(8行)を取得します。

select * from user;

p10-2

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

select * from user limit 4;

p10-3

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

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

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

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

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

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

----

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

select * from user;

p10-4

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

select * from user limit 3 offset 4;

p10-5

5番目のデータから3つのデータを取得できました。今度はOFFSET句を使用せずに7番目のデータ(引数としては6を指定)から2つのデータを取得してみます。

select * from user limit 6, 2;

p10-6

7番目のデータから2つのデータを取得できました。

このようにOFFSET句などを使うことで取得するデータの数だけではなくどの位置からデータを取得するのかも指定することが可能となります。

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

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

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

select * from user order by address;

p10-7

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

select * from user order by address limit 5;

p10-8

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

( Written by Tatsuo Ikura )