Saltar al contenido principal

Cómo utilizar el OFFSET SQL

Domina la cláusula OFFSET de SQL. Descubre cómo utilizar ORDER BY y LIMIT para devolver valores en función de la posición, con ejemplos prácticos, incluida la paginación de datos para aplicaciones web.
Actualizado 30 jul 2024  · 10 min de lectura

Aprende a utilizar la cláusula SQL OFFSET con las cláusulas ORDER BY y LIMIT para devolver valores en función de su posición en los resultados de la consulta. Explora un caso de uso específico con la paginación para aplicaciones web.

SQL OFFSET es una potente cláusula utilizada para omitir un número determinado de filas en el resultado de una consulta. A menudo se combina con la cláusula LIMIT para la paginación de datos. Aprende los fundamentos de SQL en nuestros cursos Introducción a SQL y Aprende SQL. Este tutorial explora cómo funciona OFFSET, sus aplicaciones prácticas y las mejores prácticas para optimizar tus consultas SQL. Si quieres repasar las operaciones SQL antes de que empecemos, echa un vistazo rápido a nuestra Hoja de trucos sobre conceptos básicos de SQL.

La respuesta rápida: Cómo utilizar el OFFSET SQL

La cláusula OFFSET en SQL se utiliza para omitir un número determinado de filas antes de devolver las filas del conjunto de resultados. Suele utilizarse en combinación con la cláusula LIMIT para paginar los resultados.

SELECT column_names
FROM table_name
ORDER BY column_name
LIMIT number_of_rows OFFSET offset_value;

En la consulta SQL anterior, el number_of_rows indica el número concreto de filas que hay que devolver, mientras que el offset_value muestra el número de filas que la consulta debe omitir antes de devolverlas. 

Cómo funciona OFFSET

La cláusula OFFSET omite el número especificado de filas del conjunto de resultados. Cuando se utiliza con ORDER BY, garantiza resultados coherentes saltándose filas en un orden definido, normalmente especificado por el nombre de una columna. Por defecto, ORDER BY devuelve la columna especificada en orden ascendente.

Supongamos que quieres consultar desde una tabla employees las siguientes columnas: employee_id, first_name, last_name, phone_number, y salary. También quieres excluir las 9 primeras filas de tus resultados. Utilizarás la siguiente consulta SQL.

-- Select all columns for employees, starting from the 10th row
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9 ROWS;

Es importante recordar que, debido a las columnas de ordenación no únicas, hay que tener cuidado para evitar registros duplicados.

Combinar LÍMITE y OFFSET

OFFSET se suele utilizar con LIMIT para controlar el número de filas devueltas y dónde empezar a devolver filas. 

En el ejemplo siguiente, la cláusula LIMIT devuelve sólo las 10 filas siguientes después de saltarse las 9 primeras.

-- Select all columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9
-- Fetch the next 10 rows
LIMIT 10;

Aplicaciones prácticas de OFFSET

SQL OFFSET se utiliza mucho para la paginación en aplicaciones web. La paginación de datos, para entendernos, es una técnica para dividir grandes datos en trozos más pequeños, lo que ayuda a los usuarios a navegar por grandes conjuntos de datos de forma eficiente. 

Considero que la paginación de datos es uno de los mejores ejemplos del uso de OFFSET y LIMIT. En esta técnica, las cláusulas OFFSET y LIMIT utilizadas conjuntamente descomponen los datos en trozos manejables que se muestran en varias páginas.  

Esto mejora la experiencia del usuario porque nadie se siente abrumado al ver una lista enorme de golpe. 

Otras aplicaciones de OFFSET son:

  1. Omitir registros especificados al analizar los datos.
  2. Preparar los datos para exportarlos en trozos (cuando se utiliza en combinación con LIMIT).
  3. Centrarte simplemente en los datos de un rango concreto, cuando sabes lo que buscas. 

Soporte y alternativas específicas de la base de datos

Diferentes bases de datos admiten las cláusulas OFFSET y LIMIT, como MySQL, PostgreSQL y SQLite. Se pueden utilizar métodos alternativos, como FETCH, para bases de datos que no admitan las sentencias OFFSET y LIMIT, como SQL Server.

Por ejemplo, la consulta que aparece a continuación (utilizando LIMIT) devolvería valores en las bases de datos MySQL, SQLite y PostgreSQL, pero no en SQL Server.

-- Select all columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9
-- Fetch the next 10 rows
LIMIT 10;

Por lo tanto, debes utilizar FETCH en SQL Server para obtener resultados similares utilizando la siguiente consulta;

-- Select specific columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id 
-- Skip the first 9 rows (starting from the 10th row)
OFFSET 9 ROWS 
 -- Fetch the next 10 rows
FETCH NEXT 10 ROWS ONLY;

Técnicas avanzadas: OFFSET y FETCH

La cláusula FETCH, utilizada en SQL estándar, puede ser una alternativa avanzada a LIMIT. Mientras que OFFSET especifica el número de filas a omitir, FETCH da el número de filas a devolver de la consulta.

-- Selecting columns from employees table
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Ordering the result set by employee_id for consistent pagination
ORDER BY employee_id
-- Skipping the first 20 rows in the result set
OFFSET 20 ROWS
-- Fetching the next 10 rows only after the offset
FETCH NEXT 10 ROWS ONLY;

Encontrarás otras técnicas avanzadas de SQL en nuestro curso de Analista de Datos Asociado en SQL.

Consideraciones sobre el rendimiento y otras buenas prácticas 

Utilizar OFFSET con eficacia requiere comprender su impacto en el rendimiento de las consultas. 

OFFSET puede afectar al rendimiento de la consulta, especialmente con grandes conjuntos de datos. SQL Server gestiona el almacenamiento en caché y la ejecución de consultas de forma eficiente, pero el uso de OFFSET con grandes conjuntos de datos puede requerir estrategias de optimización adicionales, como el uso de expresiones comunes de tabla (CTE) o tablas temporales. Por tanto, debes supervisar el rendimiento de las consultas para identificar los problemas y resolver los cuellos de botella que dificultan su ejecución. El curso Intermedio de SQL Server de DataCamp incluye un capítulo sobre expresiones comunes de tablas y otros temas avanzados. 

He aquí algunas buenas prácticas adicionales que he descubierto durante mi práctica.

  • Utiliza siempre una cláusula ORDER BY adecuada. Este enfoque garantiza que los registros se ordenen de forma coherente.
  • Considera las técnicas de indexación y optimización de consultas. Este método garantiza un rendimiento optimizado, especialmente cuando se trata de grandes bases de datos.

Conclusión y aprendizaje posterior

Dominar la cláusula OFFSET, que se combina con LIMIT, es crucial para una gestión eficaz de los datos. Experimenta con estas cláusulas en tus consultas SQL para mejorar el rendimiento y la experiencia del usuario. Puedes aprender más sobre la cláusula OFFSET en SQL siguiendo los cursos SQL Intermedio y Fundamentos de SQL de DataCamp.

Del mismo modo, puedes aprender más sobre el análisis de datos mediante SQL con nuestro curso Informes en SQL. Además, si quieres demostrar tus habilidades prácticas con proyectos SQL, te recomiendo que obtengas la Certificación de Asociado SQL para ayudarte a destacar en las entrevistas de trabajo.

Preguntas frecuentes

¿Qué es la cláusula OFFSET en SQL?

La cláusula OFFSET se utiliza para omitir filas antes de devolver los resultados en una consulta.

¿Por qué utilizamos ORDER BY con OFFSET?

Aunque nuestra consulta se ejecute sin la cláusula ORDER BY, el resultado puede no ser coherente o el esperado. Utilizar OFFSET sin ORDER BY significa que el motor de la base de datos no tiene un orden especificado que seguir, lo que puede dar lugar a resultados impredecibles, así que utilizamos ORDER BY para que no nos sorprenda.

¿Por qué la cláusula LIMIT devuelve un error en SQL Server?

La cláusula LIMIT es compatible con MySQL, PostgreSQL y SQLite. Utiliza FETCH para SQL Server.

¿Cuál es la diferencia entre OFFSET y LÍMITE?

La cláusula OFFSET omite las filas especificadas antes de devolver los registros, mientras que la cláusula LIMIT restringe el número de registros a devolver.

¿Qué ocurre si mi consulta OFFSET tarda en ejecutarse?

Puedes optimizar la consulta utilizando expresiones comunes de tabla (CTE) o tablas temporales.

Temas

Aprende SQL con DataCamp

Curso

Introduction to SQL

2 hr
881.8K
Learn how to create and query relational databases using SQL in just two hours.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

Tutorial

Ejemplos y tutoriales de consultas SQL

Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

15 min

Tutorial

Cómo utilizar un alias SQL para simplificar tus consultas

Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Allan Ouko's photo

Allan Ouko

9 min

Tutorial

Cómo utilizar GROUP BY y HAVING en SQL

Una guía intuitiva para descubrir los dos comandos SQL más populares para agregar filas de tu conjunto de datos
Eugenia Anello's photo

Eugenia Anello

6 min

Tutorial

Introducción a los disparadores SQL: Guía para desarrolladores

Aprende a utilizar los disparadores SQL para automatizar tareas, mantener la integridad de los datos y mejorar el rendimiento de la base de datos. Prueba ejemplos prácticos como los comandos CREATE, ALTER y DROP en MySQL y Oracle.
Oluseye Jeremiah's photo

Oluseye Jeremiah

13 min

Tutorial

FUNCIÓN SQL FORMAT()

FORMAT() es una de las funciones más utilizadas en SQL. Conozca sus principales aplicaciones en este tutorial.
Travis Tang 's photo

Travis Tang

3 min

Tutorial

Seleccionar varias columnas en SQL

Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
DataCamp Team's photo

DataCamp Team

3 min

Ver másVer más