Saltar a contenido

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.

Film Table

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.