Categorias:

Sintaxe de consulta

LIMIT / FETCH

Limita o número máximo de linhas devolvidas por uma instrução ou subconsulta. Tanto LIMIT (sintaxe Postgres) como FETCH (sintaxe ANSI) são suportados, e produzem o mesmo resultado.

Consulte também:

TOP <n>

Sintaxe

-- 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 ]
[ ... ]
Copy

Notas de uso

  • Uma cláusula ORDER BY não é necessária; entretanto, sem uma cláusula ORDER BY, os resultados são não determinísticos porque os resultados dentro de um conjunto de resultados não estão necessariamente em nenhuma ordem em particular. Para controlar os resultados retornados, use uma cláusula ORDER BY.

  • count e start devem ser constantes inteiras não negativas.

    • count especifica o número de linhas devolvidas.

      Os valores NULL, cadeia de caracteres vazia ('') e $$$$ também são aceitos e são tratados como “ilimitados”; isto é útil principalmente para conectores e drivers (como o driver JDBC) se eles receberem uma lista incompleta de parâmetros ao vincular dinamicamente os parâmetros a uma instrução.

    • OFFSET start especifica, opcionalmente, o número da linha após a qual as linhas limitadas/obtidas são devolvidas. Se OFFSET for omitido, a saída começa a partir da primeira linha do conjunto de resultados.

      Os valores NULL, cadeia de caracteres vazia ('') e $$$$ também são aceitos e são tratados como 0 (isto é, não pular nenhuma linha); isto é útil principalmente para conectores e drivers (como o driver JDBC) se eles receberem uma lista incompleta de parâmetros quando vincularem dinamicamente parâmetros a uma instrução.

  • ONLY Esta palavra-chave opcional não afeta a saída. Ela serve apenas para dar ênfase ao leitor humano.

  • TOP <n> e LIMIT <contagem> são equivalentes.

Exemplos

Os exemplos a seguir mostram o efeito do LIMIT. Para simplificar, estas consultas omitem a cláusula ORDER BY e assumem que a ordem de saída é sempre a mesma mostrada pela primeira consulta. As consultas do mundo real devem incluir 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 |
+----+
Copy

O exemplo a seguir demonstra o uso de NULLs para indicar

  • Sem limite para o número de linhas.

  • Comece na linha 1 (não pule nenhuma linha)

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