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 :

Copier
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 :

Copier
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.

Copier
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.

Copier
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).

Copier
SELECT id_emp, nom_famille, prénom FROM emp ORDER BY nom_famille, prénom OFFSET 25 ROWS FETCH FIRST 10 ROWS WITH TIES