Catégories :

Syntaxe de requête

LIMIT / FETCH

Contraint le nombre maximal de lignes renvoyées par une instruction ou une sous-requête. LIMIT (syntaxe Postgres) et FETCH (syntaxe ANSI) sont pris en charge et produisent le même résultat.

Voir aussi :

TOP <n>

Syntaxe

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

Notes sur l’utilisation

  • Une clause ORDER BY n’est pas requise ; cependant, sans une clause ORDER BY, les résultats ne sont pas déterministes car les résultats d’un ensemble de résultats ne sont pas nécessairement dans un ordre particulier. Pour contrôler les résultats renvoyés, utilisez une clause ORDER BY.

  • nombre et début doivent être des constantes entières non négatives.

    • nombre spécifie le nombre de lignes renvoyées.

      Les valeurs NULL, la chaîne vide ('') et $$$$ sont également acceptées et sont traitées comme « illimitées » ; cela est utile principalement pour les connecteurs et les pilotes (tels que le pilote JDBC) s’ils reçoivent une liste de paramètres incomplète lorsqu’ils lient dynamiquement des paramètres à une instruction.

    • OFFSET début spécifie éventuellement le numéro de ligne après lequel les lignes limitées/extraites sont renvoyées. Si OFFSET est omis, la sortie commence à la première ligne du jeu de résultats.

      Les valeurs NULL, chaîne vide ('') et $$$$ sont également acceptées et sont traitées comme 0 (c’est-à-dire qu’aucune ligne n’est ignorée) ; cela est utile principalement pour les connecteurs et les pilotes (tels que le pilote JDBC) s’ils reçoivent une liste de paramètres incomplète lorsqu’ils lient dynamiquement des paramètres à une instruction.

  • ONLY Ce mot clé facultatif n’affecte pas la sortie. C’est simplement pour mettre l’accent sur le lecteur humain.

Exemples

Les exemples suivants montrent l’effet de LIMIT. Pour des raisons de simplicité, ces requêtes omettent la clause ORDER BY et supposent que l’ordre de sortie est toujours le même que celui indiqué par la première requête. Les requêtes du monde réel doivent inclure ``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 |
+----+

L’exemple suivant montre l’utilisation de NULLs pour indiquer

  • Pas de limite au nombre de lignes.

  • Début à la ligne 1 (aucune ligne n’est ignorée)

    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 |
    +---+