CodeGym /Cursos /SQL SELF /Uso de OFFSET para saltar filas y construir paginación

Uso de OFFSET para saltar filas y construir paginación

SQL SELF
Nivel 3 , Lección 1
Disponible

Déjame preguntarte algo: ¿qué haces cuando en una tienda online ves demasiados productos en una sola página? Exacto, abres la siguiente página. ¿Y qué pasa detrás del telón? Ahí entra la magia de SQL — se usa el comando OFFSET para saltar filas. Hoy vas a aprender qué es OFFSET, para qué sirve, cómo se usa y por qué es la base de la paginación de datos.

OFFSET es una palabra clave en SQL que te permite saltar una cantidad específica de filas en los resultados de una consulta. Es como pasar páginas en un libro: puedes "saltar" las primeras 10 filas y empezar a ver desde la fila 11.

Sintaxis

SELECT columna1, columna2
FROM tabla
OFFSET cantidad_de_filas;
  • OFFSET — palabra clave para saltar filas.
  • cantidad_de_filas — cuántas filas quieres saltar.

Ejemplo sencillo de uso de OFFSET

Supón que tenemos una tabla students con los siguientes datos:

id name age
1 Alicia 22
2 Bob 24
3 Clara 23
4 Dan 21
5 Eva 25

Queremos mostrar todos los estudiantes empezando desde el tercero. Para eso podemos usar la consulta:

SELECT *
FROM students
OFFSET 2;

Resultado:

id name age
3 Clara 23
4 Dan 21
5 Eva 25

SQL "saltó" las dos primeras filas (Alicia y Bob) y mostró el resultado empezando desde la tercera fila. Es como usar un marcador: "ya leímos esta página, vamos a la siguiente".

Combinando OFFSET con LIMIT

OFFSET normalmente se usa junto con LIMIT. Así puedes saltar filas y limitar el resultado al número de registros que quieras. Esto es súper útil para construir paginación (page — página) — mostrar los datos por partes, unas pocas filas a la vez.

Supón que queremos mostrar 2 registros a la vez y empezar desde la tercera fila. La consulta sería así:

SELECT *
FROM students
LIMIT 2 
OFFSET 2;

Resultado:

id name age
3 Clara 23
4 Dan 21

Lógica de funcionamiento:

  1. OFFSET 2 salta las dos primeras filas: Alicia y Bob.
  2. LIMIT 2 toma solo dos filas de las que quedan.

Construyendo paginación

Ahora llegamos a la parte más interesante — construir paginación. Imagina que estás haciendo una app web con una lista de estudiantes. En cada página quieres mostrar 2 registros. ¿Cómo lo haces?

Principio básico:

  • La primera página no salta ninguna fila: OFFSET 0.
  • La segunda página salta 2 filas: OFFSET 2.
  • La tercera página salta 4 filas: OFFSET 4.
  • Y así sucesivamente...

Ejemplo: muestra la segunda página

En la primera página se muestran los registros 1 y 2 (Alicia y Bob). En la segunda página — los registros 3 y 4 (Clara y Dan).

SELECT *
FROM students
ORDER BY id
LIMIT 2 
OFFSET 2;

Resultado:

id name age
3 Clara 23
4 Dan 21

Ejemplo: muestra la tercera página

En la tercera página — los registros 5 y 6 (si existen).

SELECT *
FROM students
ORDER BY id
LIMIT 2 
OFFSET 4;

Resultado:

id name age
5 Eva 25

Fórmula para calcular OFFSET

Al construir sistemas de paginación puedes usar la siguiente fórmula para automatizarlo:

OFFSET = (numero_de_pagina - 1) * cantidad_de_registros_por_pagina

Por ejemplo:

  • Para la primera página: (1 - 1) * 2 = 0.
  • Para la segunda página: (2 - 1) * 2 = 2.
  • Para la tercera página: (3 - 1) * 2 = 4.

Notas importantes sobre el rendimiento

Cuando trabajas con tablas grandes, usar OFFSET puede ser ineficiente, sobre todo en páginas tardías. El motivo es que PostgreSQL igual recorre las filas que se saltan. Por ejemplo, una consulta con OFFSET 10000 obliga al SGBD a pasar por las primeras 10 000 filas antes de devolver resultados. En estos casos puedes considerar alternativas, como usar un identificador único como marcador de paginación.

Alternativa: paginación usando cursor

Para optimizar puedes usar el enfoque de "cursor". En vez de saltar filas con OFFSET, puedes recordar los identificadores de la última fila que obtuviste en la página anterior y usarlos para construir la siguiente consulta:

SELECT *
FROM students
WHERE id > ultimo_id_mostrado
ORDER BY id
LIMIT 2;

Este enfoque puede acelerar mucho el trabajo con tablas grandes.

Aplicación práctica de la paginación

La paginación se usa en la mayoría de las aplicaciones web: tiendas online, blogs, paneles de administración. Por ejemplo:

  • Mostrar la lista de productos en una tienda online;
  • Mostrar la lista de usuarios en un sistema CRM;
  • Mostrar noticias por páginas.

También la paginación puede ser útil al analizar grandes volúmenes de datos, para trabajar con porciones pequeñas.

Errores típicos al usar OFFSET

Trabajar con OFFSET a veces da problemas, sobre todo cuando estás aprendiendo. Aquí tienes algunos errores comunes:

Falta de ordenación. Si no añades ORDER BY, el orden de las filas en los resultados de OFFSET puede ser impredecible.

Consulta incorrecta:

SELECT * FROM students
OFFSET 5;

Consulta correcta:

SELECT * FROM students
ORDER BY id
OFFSET 5;

Valor incorrecto de OFFSET. Si pones un valor demasiado grande, el resultado será un conjunto vacío.

Problemas de rendimiento. Como comentamos antes, usar OFFSET grandes en páginas tardías puede ser ineficiente.

Falta de filtros. Si usas OFFSET y LIMIT sin filtrar (WHERE), puedes obtener datos innecesarios, lo que puede empeorar el rendimiento.

Orden de los operadores. El orden de los operadores en SQL es estricto: primero va LIMIT, luego OFFSET. Puedes omitir operadores, pero no cambiar el orden.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION