Aprende SQL · lección gratuita

Lección 03 · Ordenar y limitar: ORDER BY y LIMIT

Resumen

Sin ORDER BY, el motor no garantiza ningún orden en las filas que devuelve: puede variar entre ejecuciones. ORDER BY impone un orden explícito sobre el resultado, y LIMIT recorta cuántas filas se devuelven. Juntos responden preguntas del tipo "los 5 productos más caros" o "el pedido más reciente", que son omnipresentes en informes y paginación.

Sintaxis / Conceptos

La cláusula ORDER BY se escribe al final de la consulta, después de WHERE, y en el orden lógico de ejecución el motor la aplica casi al final, justo después del SELECT y antes del LIMIT. Por eso ORDER BY sí puede usar alias definidos en el SELECT (a diferencia de WHERE): cuando se ordena, la proyección ya está calculada.

La secuencia es: FROM → WHERE → SELECT → ORDER BY → LIMIT/OFFSET. Esto explica por qué LIMIT toma "los N primeros del resultado ya ordenado": sin ORDER BY, un LIMIT te da N filas cualesquiera, lo cual rara vez es lo que quieres.

Con múltiples claves, el orden importa: ORDER BY departamento_id, salario DESC agrupa por departamento (ascendente) y dentro de cada uno ordena el salario de mayor a menor. Cada columna lleva su propio ASC/DESC.

Sobre la paginación: LIMIT 10 OFFSET 20 es "la página 3 de 10 en 10". Funciona bien para volúmenes pequeños, pero OFFSET grande obliga al motor a recorrer y descartar todas las filas saltadas, así que en tablas enormes se prefiere la paginación por clave (keyset). Para este módulo, OFFSET es la herramienta adecuada.

SELECT nombre, salario FROM empleados ORDER BY salario DESC LIMIT 5

Ejemplos

-- Empleados ordenados por salario, de mayor a menor
SELECT nombre, cargo, salario
FROM empleados
ORDER BY salario DESC;

-- Orden por varias claves: por departamento y, dentro, salario descendente
SELECT departamento_id, nombre, salario
FROM empleados
ORDER BY departamento_id ASC, salario DESC;

-- Top 3 productos más caros (ordenar y luego limitar)
SELECT nombre, precio
FROM productos
ORDER BY precio DESC
LIMIT 3;

-- Paginación: segunda "página" de 5 productos más baratos
SELECT nombre, precio
FROM productos
ORDER BY precio ASC
LIMIT 5 OFFSET 5;

-- Combinado con WHERE: pedidos completados, del más reciente al más antiguo
SELECT id, fecha, estado
FROM pedidos
WHERE estado = 'Completado'
ORDER BY fecha DESC
LIMIT 5;
💡 LIMIT sin ORDER BY es no determinista. Puede devolver filas distintas en cada ejecución o en otra versión del motor. Si pides "los primeros N", añade siempre un ORDER BY que defina sin ambigüedad qué significa "primeros".

Cheatsheet

CláusulaQué hace
ORDER BY colOrdena ascendente (por defecto)
ORDER BY col DESCOrdena descendente
ORDER BY a, b DESCOrdena por a, desempata por b desc
ORDER BY 2Ordena por la 2.ª columna del SELECT
LIMIT nDevuelve como máximo n filas
LIMIT n OFFSET mSalta m filas y devuelve las siguientes n

---

← Filtrar filas: WHEREColumnas calculadas, alias y DISTINCT →

Ver todas las lecciones de Aprende SQL →