
Las cláusulas OFFSET y FETCH se utilizan con la cláusula ORDER BY. Las cuales te permiten limitar el número de filas que devolverá una consulta.
A continuación, se ilustra la sintaxis de las cláusulas OFFSET y FETCH:
ORDER BY column_list [ASC |DESC]
OFFSET offset_row_count {ROW | ROWS}
FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} ONLY
Descripción de la sintaxis:
- La cláusula OFFSET especifica el número de filas a omitir antes de comenzar a devolver filas desde la consulta. offset_row_count puede ser una constante, variable o parámetro que sea mayor o igual a cero.
- La cláusula FETCH especifica el número de filas que se devolverán después de que se haya procesado la cláusula OFFSET . offset_row_count puede ser una constante, variable o escalar que sea mayor o igual a uno.
- La cláusula OFFSET es obligatoria, mientras que la cláusula FETCH es opcional. Además, FIRST y NEXT son sinónimos respectivamente, por lo que puede usarlos indistintamente. Del mismo modo, puede usar FIRST y NEXT indistintamente.
A continuación se ilustran las cláusulas OFFSET y FETCH:
Ten en cuenta que debe usar las cláusulas OFFSET y FETCH con la cláusula ORDER BY. De lo contrario, recibirás un error.
Las cláusulas OFFSET y FETCH son preferibles para implementar la solución de paginación de consultas que la cláusula TOP.
Ejemplos de OFFSET y FETCH en SQL Server
Utilizaremos una la tabla de productos de la base de datos de ejemplo que puedes descargar aquí.
La siguiente consulta devuelve todos los productos de la tabla de products y los ordena por sus precios de lista y nombres:
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price,
product_name;
Para omitir los primeros 10 productos y devolver el resto, use la cláusula OFFSET como se muestra en la siguiente declaración:
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price,
product_name
OFFSET 10 ROWS;
Para omitir los primeros 10 productos y seleccionar los siguientes 10 productos, use las cláusulas OFFSET y FETCH siguiente manera:
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price,
product_name
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
Para obtener los 10 productos más caros, use las cláusulas OFFSET y FETCH:
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price DESC,
product_name
OFFSET 0 ROWS
FETCH FIRST 10 ROWS ONLY;
En este ejemplo, la cláusula ORDER BY ordena los productos por sus precios de lista en orden descendente. Luego, la cláusula OFFSET omite la fila cero y la cláusula FETCH recupera los primeros 10 productos de la lista.
En este tutorial, ha aprendido a utilizar las cláusulas OFFSET FETCH SQL Server que limitan el número de filas devueltas por una consulta.