Volver a la página principal
lunes 18 noviembre 2024
38

Cómo limitar resultados con FETCH FIRST en Oracle

El uso de FETCH FIRST en Oracle permite limitar la cantidad de filas devueltas por una consulta. Es una herramienta moderna y más intuitiva que otras alternativas como ROWNUM o subconsultas para paginación y optimización de consultas.

¿Qué es FETCH FIRST en Oracle?

FETCH FIRST es una cláusula introducida en Oracle 12c como parte de la sintaxis de SQL estándar. Permite recuperar las primeras filas de una consulta ordenada según criterios específicos. Es ideal para implementar paginación o para obtener muestras limitadas de datos.

Sintaxis de FETCH FIRST

SELECT columnas
FROM tabla
[WHERE condiciones]
[ORDER BY columnas]
FETCH FIRST n ROWS ONLY;

Parámetros clave

Parámetro Descripción
FETCH FIRST n ROWS Indica la cantidad de filas a retornar (reemplaza al uso tradicional de ROWNUM).
ONLY Devuelve exactamente n filas.
WITH TIES Incluye filas adicionales en caso de que haya empates en el ordenamiento.

Ejemplos de uso

1. Obtener las primeras filas ordenadas

Para recuperar los 5 productos más baratos de una tabla productos:

SELECT nombre, precio
FROM productos
ORDER BY precio ASC
FETCH FIRST 5 ROWS ONLY;

Devuelve las primeras 5 filas con los precios más bajos.

2. Usar WITH TIES para incluir empates

Si varios productos tienen el mismo precio, puedes incluirlos con WITH TIES:

SELECT nombre, precio
FROM productos
ORDER BY precio ASC
FETCH FIRST 5 ROWS WITH TIES;

Esto garantiza que todas las filas con el mismo valor que la quinta fila se incluyan en los resultados.

3. Implementar paginación con OFFSET y FETCH

Para paginación, combina OFFSET con FETCH:

SELECT nombre, precio
FROM productos
ORDER BY precio ASC
OFFSET 10 ROWS FETCH FIRST 5 ROWS ONLY;

Esto omite las primeras 10 filas y devuelve las siguientes 5, ideal para mostrar resultados en páginas.

4. Usar FETCH con condiciones

Puedes combinar FETCH FIRST con filtros WHERE para consultas más específicas:

SELECT nombre, precio
FROM productos
WHERE categoria = 'Electrónica'
ORDER BY precio DESC
FETCH FIRST 3 ROWS ONLY;

Este ejemplo devuelve los 3 productos más caros de la categoría "Electrónica".

Ventajas de FETCH FIRST sobre ROWNUM

1. Más legible: La sintaxis es clara y específica, mejorando la comprensión del código.

2. Compatibilidad con paginación: La combinación con OFFSET es sencilla y flexible.

3. Soporte para empates: La opción WITH TIES permite manejar valores duplicados fácilmente.

Consideraciones

  • FETCH FIRST requiere una cláusula ORDER BY para garantizar un conjunto de resultados predecible.
  • Para bases de datos Oracle anteriores a la versión 12c, debes usar métodos alternativos como ROWNUM.

Referencias oficiales

Consulta la documentación oficial de Oracle sobre FETCH FIRST para obtener más detalles y ejemplos avanzados.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer