Lección 2.7: Integrándolo Todo: WHERE, ORDER BY y LIMIT
Hasta ahora, hemos aprendido cómo filtrar filas (WHERE), ordenarlas (ORDER BY) y restringir el número de resultados (LIMIT). En escenarios del mundo real, casi siempre usarás estas cláusulas juntas para obtener exactamente los datos que necesitas.
El Orden de las Cláusulas
SQL tiene un orden estricto sobre cómo deben aparecer estas cláusulas en el texto de tu consulta. Si las colocas en el orden incorrecto, la base de datos devolverá un error.
A continuación se muestra la secuencia correcta solo para las cláusulas que hemos estudiado hasta ahora en este módulo. El orden completo de las partes de la consulta SQL es más amplio y se expandirá a medida que aprendas nuevos constructos del lenguaje.
La secuencia correcta en el texto de la consulta es:
SELECT(¿Qué columnas?)FROM(¿Qué tabla?)WHERE(Filtrar las filas primero)ORDER BY(Ordenar las filas filtradas)LIMIT(Tomar los primeros X resultados de la lista ordenada)OFFSET(Saltar X filas si es necesario)
Importante: este orden describe cómo escribes la consulta, no su orden de procesamiento lógico. Lógicamente, SQL maneja las partes de la consulta de manera diferente.
Orden de Procesamiento Lógico
Cuando ejecutas una consulta combinada, la base de datos la procesa conceptualmente de la siguiente manera:
- Primero, determina la fuente de datos de
FROM. - A continuación, aplica las condiciones de filtrado de
WHERE. - Después, forma la lista de columnas seleccionadas de
SELECT. - Luego, ordena el resultado de acuerdo con
ORDER BY. - Finalmente, aplica
OFFSETpara saltar filas si es necesario, y luegoLIMITpara devolver el subconjunto requerido de las filas ordenadas.
Por eso WHERE no puede referirse a alias definidos en SELECT: en la etapa de filtrado, la lista de columnas seleccionadas aún no se ha formado lógicamente.
Ejemplos
Ejemplo 1: Encontrando las 5 Películas de Acción Más Cortas
En este ejemplo, filtramos primero por categoría (conceptualmente), luego ordenamos por longitud y finalmente limitamos los resultados.
SELECT title, length, replacement_cost
FROM film
WHERE replacement_cost < 20.00
ORDER BY length ASC
LIMIT 5;
Ejemplo 2: Alquileres de Alto Valor Más Recientes
Esta consulta encuentra los 10 alquileres más recientes que duraron más de 5 días.
SELECT rental_id, rental_date, return_date
FROM rental
WHERE return_date - rental_date > 5
ORDER BY rental_date DESC
LIMIT 10;
Ejemplo 3: Buscando Actores Específicos
Encuentra los primeros 3 actores cuyo apellido comienza con 'B', ordenados alfabéticamente por su nombre.
SELECT first_name, last_name
FROM actor
WHERE last_name LIKE 'B%'
ORDER BY first_name
LIMIT 3;
Paginación con WHERE y ORDER BY
En la lección anterior, vimos la paginación básica usando LIMIT y OFFSET. En aplicaciones reales, generalmente paginas a través de una lista filtrada y ordenada.
¿Por qué necesitamos WHERE y ORDER BY para la paginación?
- Filtrado: Los usuarios generalmente quieren ver un subconjunto específico de datos (por ejemplo, productos "Activos" o películas de "Comedia").
- Consistencia: Sin
ORDER BY, la base de datos podría devolver filas en un orden diferente cada vez que vayas a la siguiente página, causando que algunos elementos aparezcan dos veces y otros se pierdan.
Fórmula de Paginación
Para implementar la paginación para "Página N" con "S" resultados por página:
LIMIT SOFFSET (N - 1) * S
Ejemplo Combinado: Página 2 de Actores 'A'
Si queremos mostrar la segunda página (5 resultados por página) de actores cuyo nombre comienza con 'A', ordenados por su apellido:
SELECT first_name, last_name
FROM actor
WHERE first_name LIKE 'A%'
ORDER BY last_name
LIMIT 5 OFFSET 5; -- Página 2: Saltar 5, tomar 5
Conclusiones Clave de esta Lección:
- Sigue el estricto orden sintáctico:
WHERE->ORDER BY->LIMIT. - Las condiciones de la cláusula
WHEREse aplican antes de que se realice la ordenación y limitación. - Esta combinación es la base para la mayoría de los informes de datos y listas "top-X" en interfaces de usuario.
- Siempre usa
LIMITconORDER BYsi deseas que tus resultados sean consistentes.
En el próximo módulo, iremos más allá de la simple recuperación de filas y exploraremos Funciones Agregadas, que nos permiten calcular totales, promedios y conteos a través de conjuntos de datos completos.