🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

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:

  1. SELECT (¿Qué columnas?)
  2. FROM (¿Qué tabla?)
  3. WHERE (Filtrar las filas primero)
  4. ORDER BY (Ordenar las filas filtradas)
  5. LIMIT (Tomar los primeros X resultados de la lista ordenada)
  6. 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:

  1. Primero, determina la fuente de datos de FROM.
  2. A continuación, aplica las condiciones de filtrado de WHERE.
  3. Después, forma la lista de columnas seleccionadas de SELECT.
  4. Luego, ordena el resultado de acuerdo con ORDER BY.
  5. Finalmente, aplica OFFSET para saltar filas si es necesario, y luego LIMIT para 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?

  1. Filtrado: Los usuarios generalmente quieren ver un subconjunto específico de datos (por ejemplo, productos "Activos" o películas de "Comedia").
  2. 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 S
  • OFFSET (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 WHERE se 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 LIMIT con ORDER BY si 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.