Cláusulas OFFSET y FETCH FIRST

Las cláusulas OFFSET y FETCH FIRST se utilizan para devolver un rango especificado de filas que empiezan a partir de un determinado punto dentro de un conjunto de resultados. La capacidad para limitar las filas recuperadas de grandes conjuntos de resultados le permite pasar de una "página" de datos a otra y mejora la eficacia.

La cláusula OFFSET indica el número de filas que se saltan antes de empezar a devolver datos. Si no se utiliza la cláusula OFFSET en una secuencia SELECT, la fila de inicio es 0. La cláusula FETCH FIRST especifica el número de filas que se van a devolver, bien como un valor entero sin signo mayor que o igual a 1, bien como un porcentaje, desde el punto de inicio indicado en la cláusula OFFSET. Si se utilizan ambas cláusulas, OFFSET y FETCH FIRST, en una secuencia SELECT, la cláusula OFFSET debe ir primero.

Las cláusulas OFFSET y FETCH FIRST no se admiten en subconsultas.

Formato de la cláusula OFFSET

El formato de OFFSET es:

Copiar
OFFSET [ n {ROWS | ROW} ]

n es un número entero sin signo. Si n es mayor que el número de filas que se devuelven en el conjunto de resultados, entonces no se devuelve nada y no aparece un mensaje de error.

ROWS es lo mismo que ROW.

Formato de la cláusula FETCH FIRST

El formato FETCH FIRST es:

Copiar
FETCH FIRST [ n [ PERCENT ] ] { ROWS | ROW } {ONLY | WITH TIES } ]

n es el número de filas que se van a devolver. El valor predeterminado es 1 si n se omite.

n es un entero sin signo superior o igual 1, a menos que incluya PERCENT tras él. Si a n le sigue PERCENT, el valor puede ser tanto un valor fraccional positivo como un valor entero sin signo.

ROWS es lo mismo que ROW.

WITH TIES se debe utilizar con la cláusula ORDER BY.

WITH TIES permite que se devuelvan más filas de las especificadas en el valor de conteo FETCH dado que las filas de pares, aquellas que no son distintas en base a la cláusula ORDER BY, también se devuelven.

Ejemplos

Devuelva información de la fila 26 del conjunto de resultados ordenado por apellidos y, a continuación por nombre.

Copiar
SELECT id_emp, apellidos, nombre FROM emp ORDER BY apellidos, nombre OFFSET 25 ROWS

Especifique que quiere que se devuelvan solo diez filas:

Copiar
SELECT id_emp, apellidos, nombre FROM emp ORDER BY apellidos, nombre OFFSET 25 ROWS FETCH FIRST 10 ROWS ONLY

Devuelva las diez filas y sus filas de pares (filas que no son distintas según la cláusula ORDER BY).

Copiar
SELECT id_emp, apellidos, nombre FROM emp ORDER BY apellidos, nombre OFFSET 25 ROWS FETCH FIRST 10 ROWS WITH TIES