Clausole OFFSET e FETCH FIRST
Le clausole OFFSET
e FETCH FIRST
sono utilizzate per restituire un intervallo specificato di righe da un punto particolare di un set di risultati. La capacità di limitare le righe recuperate da set di risultati di grandi dimensioni permette di scorrere i dati e migliora l'efficienza.
La clausola OFFSET
indica il numero di righe da saltare prima di iniziare a restituire i dati. Se la clausola OFFSET
non è utilizzata in un'istruzione SELECT
, la riga di inizio è 0. La clausola FETCH FIRST
specifica il numero di righe che deve essere restituito, sia come un intero senza segno maggiore o uguale a 1 o come una percentuale, dal punto di partenza indicato nella clausola OFFSET
. Se entrambe le clausole OFFSET
e FETCH FIRST
sono utilizzate in un'istruzione SELECT
, la clausola OFFSET
deve venire prima.
Le clausole OFFSET
e FETCH FIRST
non sono supportate nelle subquery.
Formato della clausola OFFSET
Il formato OFFSET
è:
OFFSET [ n {ROWS | ROW} ]
n
è un intero senza segno. Se n
è maggiore del numero delle righe restituite nel set di risultati, non viene restituito nulla e non viene visualizzato nessun messaggio di errore.
ROWS
è uguale a ROW
.
Formato della clausola FETCH FIRST
Il formato FETCH FIRST
è:
FETCH FIRST [n [PERCENT]] { ROWS| ROW } {ONLY| WITH TIES } ]
n
è il numero di righe che deve essere restituito. Il valore predefinito è 1 se n
è omesso.
n
è un valore intero senza segno, maggiore o uguale a 1, a meno che non sia seguito da PERCENT
. Se n
è seguito da PERCENT
, il valore può essere positivo frazionario o un intero senza segno.
ROWS
è uguale a ROW
.
WITH TIES
deve essere utilizzato con la clausola ORDER BY
.
WITH TIES
permette di restituire più righe di quelle specificate nel valore di conteggio FETCH
perché vengono restituite anche le righe equivalenti, ossia quelle righe che non sono distinte in base alla clausola ORDER BY
.
Restituire le informazioni dalla ventiseiesima riga del gruppo di risultati ordinato per cognome
poi per nome
.
SELECT id_dip, cognome, nome FROM dip ORDER BY cognome, nome OFFSET 25 ROWS
Specificare che si desidera restituire solo dieci righe.
SELECT id_dip, cognome, nome FROM dip ORDER BY cognome, nome OFFSET 25 ROWS FETCH FIRST 10 ROWS ONLY
Restituire le dieci righe e le loro righe equivalenti (righe che sono non distinte in base alla clausola ORDER BY
).
SELECT id_dip, cognome, nome FROM dip ORDER BY cognome, nome OFFSET 25 ROWS FETCH FIRST 10 ROWS WITH TIES