Cláusulas OFFSET e FETCH FIRST
As cláusulas OFFSET e FETCH FIRST são usadas para retornar um intervalo especificado de linhas que começam com um ponto de início em particular em um conjunto de resultados. A capacidade de limitar as linhas recuperadas dos grandes conjuntos de resultados permite “percorrer” entre os dados e aprimorar a eficiência.
A cláusula OFFSET indica o número de linhas a ignorar antes de começar a retornar dados. Se a cláusula OFFSET não for usada em uma instrução SELECT, a linha inicial será 0. A cláusula FETCH FIRST especifica o número de linhas a serem retornadas, assim como um número inteiro sem sinal maior que ou igual a 1 ou como uma porcentagem, do ponto inicial indicado na cláusula OFFSET. Se as cláusulas OFFSET e FETCH FIRST forem ambas usadas em uma instrução SELECT, a cláusula OFFSET deve vir primeiro.
As cláusulas OFFSET e FETCH FIRST não são suportadas em subconsultas.
Formato da cláusula OFFSET
O formato OFFSET é:
OFFSET [ n {ROWS | ROW} ]
n é um número inteiro sem sinal. Se n é maior que o número de linhas retornado em um conjunto
de resultados, então nada é retornado e nenhuma mensagem de erro é exibida.
ROWS é o mesmo que ROW.
Formato da cláusula FETCH FIRST
O formato FETCH FIRST é:
FETCH FIRST [ n [ PERCENT ] ] { ROWS | ROW } {ONLY | WITH TIES } ]
n é o número de linhas a serem retornadas. O valor padrão é 1 se n for omitido.
n é um número inteiro sem sinal maior que ou igual a 1, a menos que seja seguido por PERCENT. Se n for seguido por PERCENT, o valor pode ser uma fração positiva ou um número inteiro sem sinal.
ROWS é o mesmo que ROW.
WITH TIES deve ser usado com a cláusula ORDER BY.
A cláusula WITH TIES permite que mais linhas sejam retornadas do que o especificado no valor de conta FETCH porque as linhas pares, as que não são diferenciadas com base na cláusula ORDER BY, também são retornadas.
Exemplos
Retorne informações de vinte e seis linhas do conjunto de resultados classificado por sobrenome em seguida por nome.
SELECT id_funcionário, sobrenome, nome FROM func ORDER BY sobrenome, nome OFFSET 25 ROWS
Especifique que você deseja retornar apenas dez linhas.
SELECT id_funcionário, sobrenome, nome FROM func ORDER BY sobrenome, nome OFFSET 25 ROWS FETCH FIRST 10 ROWS ONLY
Retorne as dez linhas e suas linhas pares (linhas que não são diferenciadas com base na cláusula ORDER BY).
SELECT id_funcionário, sobrenome, nome FROM func ORDER BY sobrenome, nome OFFSET 25 ROWS FETCH FIRST 10 ROWS WITH TIES