Clauses OFFSET et FETCH FIRST
Les clauses OFFSET et FETCH FIRST permettent de renvoyer une plage de rangées en commençant par un point de départ donné dans un ensemble de résultats. La capacité à limiter les rangées récupérées dans des ensembles de résultats étendus vous permet de passer les données en revue et d'améliorer l'efficacité.
La clause OFFSET indique le nombre de rangées à ignorer avant de commencer à renvoyer des données. Si la clause OFFSET n'est pas utilisée dans une instruction SELECT, la rangée de départ sera 0. La clause FETCH FIRST indique le nombre de rangées à renvoyer, sous la forme d'un entier non signé supérieur ou égal à 1 ou sous la forme d'un pourcentage, depuis le point de départ indiqué dans la clause OFFSET. Si les deux clauses OFFSET et FETCH FIRST sont utilisées dans une instruction SELECT, la clause OFFSET doit être prioritaire.
Les clauses OFFSET et FETCH FIRST ne sont pas prises en charge dans les sous-requêtes.
Format de la clause OFFSET
Le format OFFSET est le suivant :
OFFSET [ n {ROWS | ROW} ]
n est un entier non signé. Si n est supérieur au nombre de rangées renvoyées dans l'ensemble de résultats, alors rien ne sera renvoyé et aucun message d'erreur n'apparaîtra.
ROWS est l'équivalent de ROW.
Format de la clause FETCH FIRST
Le format FETCH FIRST est le suivant :
FETCH FIRST [ n [ PERCENT ] ] { ROWS | ROW } {ONLY | WITH TIES } ]
n indique le nombre de rangées à renvoyer. La valeur par défaut est 1 si n est exclu.
n est un entier non signé supérieur ou égal à 1 à moins qu'il soit suivi par PERCENT. Si n est suivi par PERCENT, la valeur peut être une valeur fractionnelle positive ou un entier non signé.
ROWS est l'équivalent de ROW.
WITH TIES doit être utilisé avec la clause ORDER BY.
WITH TIES permet de renvoyer davantage de rangées contrairement à la valeur spécifiée dans FETCH car les rangées homologues, ces rangées qui ne sont pas distinctes et basées sur la clause ORDER BY, sont également renvoyées.
Exemples
Renvoyer des informations depuis la 26ème rangée de l'ensemble de résultats triés par nom_famille, puis par prénom.
SELECT id_emp, nom_famille, prénom FROM emp ORDER BY nom_famille, prénom OFFSET 25 ROWS
Indiquer que vous voulez uniquement renvoyer dix rangées.
SELECT id_emp, nom_famille, prénom FROM emp ORDER BY nom_famille, prénom OFFSET 25 ROWS FETCH FIRST 10 ROWS ONLY
Renvoyer dix rangées et leurs rangées homologues (rangées qui ne sont pas distinctes et basées sur la clause ORDER BY).
SELECT id_emp, nom_famille, prénom FROM emp ORDER BY nom_famille, prénom OFFSET 25 ROWS FETCH FIRST 10 ROWS WITH TIES