Limitar filas en PostgreSQL

Bilal Shahid 15 febrero 2024
  1. Use la cláusula LIMIT para limitar filas en PostgreSQL
  2. Use la cláusula FETCH FIRST para limitar filas en PostgreSQL
Limitar filas en PostgreSQL

En PostgreSQL, podemos utilizar la instrucción SELECT para enumerar las filas de una tabla. Sin embargo, si queremos enumerar solo filas selectivas, debemos usar varias cláusulas en consecuencia.

Una cláusula utilizada con la instrucción SELECT para mostrar filas selectivas de una tabla es la cláusula LIMIT. La cláusula LIMIT puede restringir el número de filas enumeradas en los datos resultantes.

Este artículo describirá la palabra clave LIMIT y sus usos en PostgreSQL.

Use la cláusula LIMIT para limitar filas en PostgreSQL

La sintaxis de la cláusula LIMIT se muestra a continuación:

LIMIT { count }

Aquí, el campo recuento se refiere al número de filas que se contarán y mostrarán. La palabra clave ALL se puede utilizar en lugar de count para mostrar todas las filas devueltas por la consulta, con el mismo efecto que sin límite.

Entendamos cómo se usa la cláusula LIMIT a través de una base de datos de muestra que tiene la siguiente tabla:

create table dummy
(
num int not null,
constraint PK primary key (num)
);

Ahora, llenemos esta tabla de muestra con algunos valores:

insert into dummy values (150), (120), (330), (240), (150), (60), (270), (110), (400), (350);

Si usamos una declaración simple SELECT * from dummy para enumerar las filas de esta tabla, obtendremos el siguiente resultado:

LÍMITE de PostgreSQL - Salida 1

¿Qué pasa si queremos mostrar solo las primeras cinco filas? Podemos usar fácilmente la cláusula LIMIT para eso.

Es una funcionalidad opcional de la sentencia SELECT, que se puede utilizar de la siguiente forma:

SELECT * from dummy
LIMIT 5;

Esto enumerará solo las primeras cinco filas de la tabla:

LÍMITE de PostgreSQL - Salida 2

Nota: Si el valor de las filas especificadas en la cláusula LIMIT es mayor que las filas presentes en la tabla, se muestran todas las filas de la tabla.

Sin embargo, la cláusula LIMIT no es muy sensata si las filas no están ordenadas, lo que significa que su orden es impredecible y la consulta LIMIT puede mostrar resultados variables. Podemos contrarrestar esto usando la cláusula LIMIT con la cláusula ORDER BY en la consulta SELECT.

El comando ORDENAR POR le permite ordenar los datos en función de uno o varios atributos de la tabla. Usando ese conjunto de atributos, también puede ordenar en orden ascendente o descendente.

Veamos el efecto de usar la cláusula LIMIT con ORDER BY en nuestra tabla ficticia. El código será el siguiente:

SELECT * from dummy
ORDER BY num
LIMIT 5;

Esto nos dará el siguiente resultado:

LÍMITE de PostgreSQL - Salida 3

Podemos ver que la consulta ha devuelto los cinco valores más pequeños de num porque la cláusula ORDER BY ordenó los datos en orden ascendente de forma predeterminada. Por lo tanto, podemos usar las cláusulas LIMIT y ORDER BY para obtener el número de valores especificado más alto o más bajo.

¿Qué pasa si no queremos mostrar las filas a partir de la primera? La cláusula LIMIT nos otorga flexibilidad para hacer esto también.

La sintaxis entonces se vuelve así:

LIMIT { count }
OFFSET { start }

El valor en lugar de inicio especifica el número de filas que se omitirán antes de que se muestre el número de filas especificado. Esto significa que el número de filas de “inicio” se omite y el siguiente número de filas de “recuento” se muestra como salida.

Nota: Si el valor de inicio especificado en la cláusula OFFSET es mayor que las filas presentes en la tabla, no se muestran las filas de la tabla.

Demostremos el uso de OFFSET ejecutando la siguiente consulta en la tabla ficticia:

SELECT * from dummy
ORDER BY num
LIMIT 5
OFFSET 2;

Este código comenzará desde la tercera fila, omitiendo los dos primeros como se especifica, y luego mostrará los siguientes cinco de la siguiente manera:

LÍMITE de PostgreSQL - Salida 4

Nota: si el valor en lugar de contar se establece como NULL, tendrá el mismo efecto que sin límite y mostrará todas las filas resultantes. Si el valor en lugar de inicio se establece como NULL, tendrá el mismo efecto que OFFSET 0 y comenzará a mostrarse desde la primera fila.

PostgreSQL ofrece un equivalente a la cláusula LIMIT, que podemos usar para generar solo el número requerido de filas de una tabla. Esto se explica a continuación.

Use la cláusula FETCH FIRST para limitar filas en PostgreSQL

Una alternativa a la cláusula LIMIT es la cláusula FETCH FIRST, que tiene la siguiente sintaxis:

FETCH FIRST { count } ROWS ONLY;

Aquí nuevamente, “contar” se reemplaza por el número de filas que deseamos que se muestren. Veamos cómo se usa la cláusula FETCH FIRST en el código usando la misma tabla ficticia:

SELECT * from dummy
ORDER BY num
FETCH FIRST 5 ROWS ONLY;

Esto tendrá el mismo efecto que escribir LIMIT 5 y mostrará las siguientes filas resultantes:

PostgreSQL FETCH FIRST - Salida 1

Sin embargo, si no queremos mostrar las filas a partir de la primera, podemos usar la cláusula OFFSET con FETCH FIRST. Esto se escribe de la siguiente manera:

OFFSET { start }
FETCH FIRST { count } ROWS ONLY;

Usemos esto en nuestra tabla ficticia en la forma de esta consulta:

SELECT * from dummy
ORDER BY num
OFFSET 2
FETCH FIRST 5 ROWS ONLY;

Esto buscará e imprimirá las siguientes filas después de omitir las dos primeras:

PostgreSQL FETCH FIRST - Salida 2

Esto resume las diferentes formas en que se usa la cláusula LIMIT en PostgreSQL para restringir el número de filas que se muestran como resultado de una consulta SELECT. Esperamos que haya aprendido el uso de los comandos LIMIT y FETCH FIRST como alternativas entre sí.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Artículo relacionado - PostgreSQL Table