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

Copia
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 è:

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

Esempi

Restituire le informazioni dalla ventiseiesima riga del gruppo di risultati ordinato per cognome poi per nome.

Copia
SELECT id_dip, cognome, nome FROM dip ORDER BY cognome, nome OFFSET 25 ROWS

Specificare che si desidera restituire solo dieci righe.

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

Copia
SELECT id_dip, cognome, nome FROM dip ORDER BY cognome, nome OFFSET 25 ROWS FETCH FIRST 10 ROWS WITH TIES