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

Copiar
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 é:

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

Copiar
SELECT id_funcionário, sobrenome, nome FROM func ORDER BY sobrenome, nome OFFSET 25 ROWS

Especifique que você deseja retornar apenas dez linhas.

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

Copiar
SELECT id_funcionário, sobrenome, nome FROM func ORDER BY sobrenome, nome OFFSET 25 ROWS FETCH FIRST 10 ROWS WITH TIES