カテゴリ:

クエリ構文

LIMIT / FETCH

ステートメントまたはサブクエリによって返される行の最大数を制限します。LIMIT (Postgres構文)と FETCH (ANSI 構文)の両方がサポートされており、同じ結果が生成されます。

こちらもご参照ください:

TOP <n>

構文

-- Postgres syntax
SELECT ...
FROM ...
[ ORDER BY ... ]
LIMIT <count> [ OFFSET <start> ]
[ ... ]

-- ANSI syntax
SELECT ...
FROM ...
[ ORDER BY ... ]
[ OFFSET <start> ] [ { ROW | ROWS } ] FETCH [ { FIRST | NEXT } ] <count> [ { ROW | ROWS } ] [ ONLY ]
[ ... ]

使用上の注意

  • ORDER BY 句は不要です。ただし、 ORDER BY 句がない場合、結果セット内の結果は必ずしも特定の順序であるとは限らないため、結果は非決定的です。返される結果を制御するには、 ORDER BY 句を使用します。

  • 件数 および 開始 は負でない整数定数でなければなりません。

    • 件数 は、返される行の数を指定します。

      値 NULL、空の文字列('')、および $$$$ も受け入れられ、「無制限」として扱われます。これは、パラメーターをステートメントに動的にバインドするときに不完全なパラメーターリストを受け取った場合に、主にコネクタとドライバー(JDBC ドライバーなど)に役立ちます。

    • OFFSET 開始 はオプションで、制限/フェッチされた行が返される行番号を指定します。 OFFSET を省略すると、出力は結果セットの最初の行から始まります。

      値 NULL、空の文字列('')および $$$$ も受け入れられ、0として扱われます(つまり、行をスキップしません)。これは、パラメーターをステートメントに動的にバインドするときに不完全なパラメーターリストを受け取った場合に、主にコネクタとドライバー( JDBC ドライバーなど)に役立ちます。

  • ONLY このオプションのキーワードは、出力には影響しません。これは、人間の読者に対する強調だけのものです。

次の例は、 LIMIT の効果を示しています。簡単にするために、これらのクエリは ORDER BY 句を省略し、出力順序は常に最初のクエリで示されたものと同じであると想定しています。 実際のクエリには ``ORDER BY`` を含める必要があります。

select c1 from testtable;

+------+
|   C1 |
|------|
|    1 |
|    2 |
|    3 |
|   20 |
|   19 |
|   18 |
|    1 |
|    2 |
|    3 |
|    4 |
| NULL |
|   30 |
| NULL |
+------+

select c1 from testtable limit 3 offset 3;

+----+
| C1 |
|----|
| 20 |
| 19 |
| 18 |
+----+

select c1 from testtable order by c1;

+------+
|   C1 |
|------|
|    1 |
|    1 |
|    2 |
|    2 |
|    3 |
|    3 |
|    4 |
|   18 |
|   19 |
|   20 |
|   30 |
| NULL |
| NULL |
+------+

select c1 from testtable order by c1 limit 3 offset 3;

+----+
| ID |
|----|
|  2 |
|  3 |
|  3 |
+----+

次の例は、 NULLs を使用して示すことを示しています

  • 行数に制限はありません。

  • 行1から開始(行をスキップしないでください)

    CREATE TABLE demo1 (i INTEGER);
    INSERT INTO demo1 (i) VALUES (1), (2);
    
    SELECT * FROM demo1 ORDER BY i LIMIT NULL OFFSET NULL;
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    SELECT * FROM demo1 ORDER BY i LIMIT '' OFFSET '';
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    SELECT * FROM demo1 ORDER BY i LIMIT $$$$ OFFSET $$$$;
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+