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