7.6. LIMIT et OFFSET

LIMIT et OFFSET permettent de ne récupérer qu'une partie des lignes engendrées par le reste de la requête :

SELECT liste_selection
    FROM expression_table
    [LIMIT { numero | ALL }] [OFFSET numero]

Si une limite de comptage est donnée, il ne sera pas retourné plus de lignes que ce nombre (peut-être moins si la requête complète retourne moins de lignes). LIMIT ALL revient à ne pas spécifier la clause LIMIT.

OFFSET indique un nombre de lignes à ignorer avant de commencer à retourner des lignes. OFFSET 0 revient à oublier la clause OFFSET. Si OFFSET et LIMIT sont utilisés ensemble, OFFSET lignes sont ignorées avant de retourner LIMIT lignes.

Lors de l'utilisation de LIMIT, il est nécessaire d'utiliser une clause ORDER BY contraignant les lignes résultantes dans un ordre unique. Dans le cas contraire, il est impossible de prévoir le sous-ensemble de lignes qui sera retourné.

L'optimiseur de requêtes tient compte de LIMIT lors de la génération d'un plan de requêtes. Ainsi, en fonction des valeurs précisées pour LIMIT et OFFSET, différents plans seront obtenus impliquant différents ordres de lignes. Sans l'utilisation de la clause ORDER BY pour forcer l'ordre des résultats, l'emploi de valeurs LIMIT/OFFSET différentes pour sélectionner des sous-ensembles différents du résultat d'une requête donnera des résultats incohérents. Ceci n'est pas un bogue, le SQL ne promettant pas de délivrer les résultats d'une requête dans un ordre particulier en l'absence de spécifications de tri.