取得データの行数を指定

SELECT文でデータを取得した場合、WHERE句などを指定した場合でも条件に一致する全てのデータを取得します。この取得する件数を制限したい場合にはLIMIT句を使います。書式は次の通りです。

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

LIMIT句の後に行数を指定すると、取得するデータの行数を指定することができます。指定した行数が取得できるデータの全データの行数よりも多い場合には、単に全てのデータを取得します。

具体的には次のようになります。

create table customer(id integer, name text);

select * from customer limit 3;

上記のSELECT文では3行分のデータを取得します。

取得を開始する位置を指定

特に指定しなければ先頭のデータから順にLIMIT句で指定した行数分だけデータを取得しますがOFFSET句を指定すると取得を開始する行の位置を指定することができます。書式は次の通りです。

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

OFFSET句の後に開始位置を指定すると、開始位置に指定した数値の行数分はデータを取得せず、その次の行からデータの取得を開始します。

具体的には次のようになります。

create table customer(id integer, name text);

select * from customer limit 3 offset 1;

上記のSELECT文では2行目のデータから3行分のデータを取得します。

なおOFFSET句を使用せずにLIMIT句だけで開始位置を指定することもできます。書式は次の通りです。

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

LIMIT句の後に「開始位置, 行数」の形式で値を指定します。開始位置の方を先に指定する点に注意して下さい。

サンプル

では実際に試してみます。

次のようなデータが格納されたテーブルを対象にします。

p10-1

取得するデータを3行に限定します。

select * from customer limit 3;

p10-2

開始位置が指定されていませんので、データの先頭から3行分のデータを取得しています。

では開始位置に1を指定してみます。

select * from customer limit 3 offset 1;

p10-3

開始位置に1が指定されていますので、2行目のデータから3行分データを取得しています。

では別の書式を使って同じだけのデータを取得してみます。

select * from customer limit 1, 3;

p10-4

結果は先ほどと同じです。

なお取得するデータの行数を指定する場合には、データの並び順が重要となってきます。ORDER BY句などを使って取得するデータの並び方を明示的に指定するようにして下さい。(ORDER BY句については「取得データをソート(ORDER BY句)」を参照して下さい)。