Para omitir un cierto número de filas y recuperar un número específico de filas, a menudo se utiliza la cláusula LIMIT
en la sentencia SELECT
.
La cláusula LIMIT
es ampliamente utilizada por muchos Sistemas de Gestión de Bases de Datos Relacionales como MySQL, H2 y HSQLDB. Sin embargo, la cláusula LIMIT
no es un estándar SQL.
Para cumplir con el estándar SQL, PostgreSQL soporta la cláusula FETCH
para omitir un cierto número de filas y luego obtener un número específico de filas.
Tenga en cuenta que la cláusula FETCH
se introdujo como parte del estándar SQL en SQL:2008.
A continuación se ilustra la sintaxis de la cláusula FETCH
de PostgreSQL:
OFFSET row_to_skip { ROW | ROWS }
FETCH { FIRST | NEXT } [ row_count ] { ROW | ROWS } ONLY
En esta sintaxis:
En primer lugar, especifique el número de filas que desea omitir (row_to_skip
) después de la palabra clave OFFSET
. El inicio es un número entero cero o positivo. Por defecto es 0, lo que significa que la consulta no se saltará ninguna fila.
Si row_to_skip
es mayor que el número de filas de la tabla, la consulta no devolverá ninguna fila.
En segundo lugar, indique el número de filas a recuperar (row_count
) en la cláusula FETCH
. El row_count
debe ser un entero 1 o mayor. El valor por defecto es 1.
El ROW
es el sinónimo de ROWS
, FIRST
es el sinónimo de NEXT
así que puedes usarlos indistintamente.
Debido a que la tabla almacena las filas en un orden no especificado, siempre debe utilizar la cláusula FETCH
con la cláusula ORDER BY
para que el orden de las filas sea consistente.
Note que la clausula OFFSET
debe venir antes de la clausula FETCH
en SQL:2008. Sin embargo, las cláusulas OFFSET
y FETCH
pueden aparecer en cualquier orden en PostgreSQL.
FETCH vs. LIMIT¶
La cláusula FETCH
es funcionalmente equivalente a la cláusula LIMIT
. Si planea hacer su aplicación compatible con otros sistemas de bases de datos, debería usar la cláusula FETCH
porque sigue el estándar SQL.
Ejemplos de FETCH en PostgreSQL¶
Usemos la tabla film
en la base de datos de ejemplo para la demostración.
The following query uses the FETCH
clause to select the first film sorted by titles in ascending order:
SELECT
film_id,
title
FROM
film
ORDER BY
title
FETCH FIRST ROW ONLY;
Salida:
film_id | title
---------+------------------
1 | Academy Dinosaur
(1 row)
Equivale a la siguiente consulta:
SELECT
film_id,
title
FROM
film
ORDER BY
title
FETCH FIRST 1 ROW ONLY;
La siguiente consulta utiliza la cláusula FETCH
para seleccionar las cinco primeras películas ordenadas por títulos:
SELECT
film_id,
title
FROM
film
ORDER BY
title
FETCH FIRST 5 ROW ONLY;
Salida:
film_id | title
---------+------------------
1 | Academy Dinosaur
2 | Ace Goldfinger
3 | Adaptation Holes
4 | Affair Prejudice
5 | African Egg
(5 rows)
La siguiente sentencia devuelve las cinco películas siguientes a las cinco primeras ordenadas por títulos:
SELECT
film_id,
title
FROM
film
ORDER BY
title
OFFSET 5 ROWS
FETCH FIRST 5 ROW ONLY;
Salida:
film_id | title
---------+------------------
6 | Agent Truman
7 | Airplane Sierra
8 | Airport Pollock
9 | Alabama Devil
10 | Aladdin Calendar
(5 rows)
Resumen¶
- Utilice la cláusula
FETCH
de PostgreSQL para omitir un cierto número de filas y recuperar un número específico de filas de una consulta.