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:
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:
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.
Devuelva información de la fila 26 del conjunto de resultados ordenado por apellidos
y, a continuación por nombre
.
SELECT id_emp, apellidos, nombre FROM emp ORDER BY apellidos, nombre OFFSET 25 ROWS
Especifique que quiere que se devuelvan solo diez filas:
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
).
SELECT id_emp, apellidos, nombre FROM emp ORDER BY apellidos, nombre OFFSET 25 ROWS FETCH FIRST 10 ROWS WITH TIES