Aprende SQL · lección gratuita
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.
ORDER BY col: ordena por esa columna; ASC (ascendente, por defecto) o DESC (descendente).ORDER BY a, b DESC ordena primero por a, y desempata por b.LIMIT n: devuelve como máximo n filas (tras ordenar).LIMIT n OFFSET m: salta las primeras m filas y devuelve las siguientes n → base de la paginación.SELECT (ORDER BY 2) o por un alias definido en él.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
-- 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;
💡LIMITsinORDER BYes 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 unORDER BYque defina sin ambigüedad qué significa "primeros".
| Cláusula | Qué hace |
|---|---|
ORDER BY col | Ordena ascendente (por defecto) |
ORDER BY col DESC | Ordena descendente |
ORDER BY a, b DESC | Ordena por a, desempata por b desc |
ORDER BY 2 | Ordena por la 2.ª columna del SELECT |
LIMIT n | Devuelve como máximo n filas |
LIMIT n OFFSET m | Salta m filas y devuelve las siguientes n |
---
← Filtrar filas: WHEREColumnas calculadas, alias y DISTINCT →