📊 Ordenar datos con ORDER BY
En esta lección aprenderás a organizar los resultados de tus consultas SQL utilizando la cláusula ORDER BY. Esta es una de las herramientas más utilizadas en SQL para presentar datos de forma ordenada y comprensible.
La cláusula
ORDER BY se utiliza al final de una sentencia SELECT para ordenar los resultados según una o más columnas. Por defecto, ordena en forma ascendente (A-Z, 0-9), pero puedes especificar orden descendente (Z-A, 9-0) si lo necesitas.
🎯 Sintaxis básica de ORDER BY
La sintaxis fundamental es sencilla y siempre se coloca al final de tu consulta SELECT:
SELECT columna1, columna2
FROM nombre_tabla
ORDER BY columna1 [ASC|DESC];
Donde:
- columna1, columna2: Las columnas que deseas seleccionar
- nombre_tabla: La tabla de donde provienen los datos
- columna1: La columna por la cual quieres ordenar
- ASC: Orden ascendente (es el valor por defecto)
- DESC: Orden descendente
📚 Ejemplo práctico: La tabla "empleados"
Para todos nuestros ejemplos, utilizaremos esta tabla de ejemplo llamada empleados:
| id_empleado | nombre | apellido | departamento | salario | fecha_contratacion |
|---|---|---|---|---|---|
| 1 | María | García | Ventas | 45000 | 2020-03-15 |
| 2 | Carlos | Rodríguez | Marketing | 52000 | 2019-08-22 |
| 3 | Ana | Martínez | Ventas | 38000 | 2021-01-10 |
| 4 | Luis | Pérez | Recursos Humanos | 41000 | 2020-11-05 |
| 5 | Elena | Fernández | Marketing | 48000 | 2022-02-28 |
🔤 Ordenar por una sola columna
Orden Ascendente (ASC)
El orden ascendente es el predeterminado. Si no especificas nada, SQL asumirá ASC.
SELECT nombre, apellido, salario
FROM empleados
ORDER BY salario ASC;
Resultado:
| nombre | apellido | salario |
|---|---|---|
| Ana | Martínez | 38000 |
| María | García | 45000 |
| Luis | Pérez | 41000 |
| Elena | Fernández | 48000 |
| Carlos | Rodríguez | 52000 |
También puedes omitir ASC y escribir simplemente:
SELECT nombre, apellido, salario
FROM empleados
ORDER BY salario;
Orden Descendente (DESC)
Para obtener los valores más altos primero, utiliza DESC.
SELECT nombre, apellido, salario
FROM empleados
ORDER BY salario DESC;
DESC cuando necesites encontrar rápidamente los valores máximos, como los empleados mejor pagados, los productos más caros, o las ventas más recientes.
📅 Ordenar por fechas
Ordenar por fechas es muy común. SQL maneja las fechas de forma inteligente, así que puedes ordenarlas naturalmente:
-- Empleados del más antiguo al más reciente
SELECT nombre, apellido, fecha_contratacion
FROM empleados
ORDER BY fecha_contratacion ASC;
-- Empleados más recientes primero
SELECT nombre, apellido, fecha_contratacion
FROM empleados
ORDER BY fecha_contratacion DESC;
🔢 Ordenar por múltiples columnas
A veces necesitas un orden más complejo. Puedes especificar varias columnas separadas por comas:
SELECT nombre, departamento, salario
FROM empleados
ORDER BY departamento ASC, salario DESC;
¿Cómo funciona?
- Primero, SQL ordena por la primera columna especificada (
departamento). - Después, dentro de cada grupo, ordena por la segunda columna (
salario). - Esto permite crear subordenamientos dentro de categorías.
Resultado esperado:
| nombre | departamento | salario |
|---|---|---|
| Luis | Recursos Humanos | 41000 |
| Carlos | Marketing | 52000 |
| Elena | Marketing | 48000 |
| María | Ventas | 45000 |
| Ana | Ventas | 38000 |
"El orden de las columnas en ORDER BY importa mucho. SQL evalúa de izquierda a derecha, así que coloca primero la columna más importante para tu clasificación."
ORDER BY puede tener su propia dirección (ASC o DESC). Esto es útil cuando quieres, por ejemplo, ordenar alfabéticamente por nombre, pero numéricamente por salario en sentido inverso.
📍 Ordenar por posición de columna
Otra técnica útil es ordenar por el número de posición de la columna en el SELECT:
-- "1" se refiere a la primera columna del SELECT (nombre)
-- "3" se refiere a la tercera columna del SELECT (salario)
SELECT nombre, apellido, salario
FROM empleados
ORDER BY 1 ASC, 3 DESC;
Usar posiciones es práctico cuando:
- Estás probando consultas rápidas en la terminal
- Las expresiones son muy largas y repetirías código
- Estás utilizando funciones de agregación complejas
Sin embargo, es preferible usar nombres de columna porque:
- El código es más legible para otros desarrolladores
- Si modificas el SELECT, el ORDER BY sigue funcionando correctamente
- Reduce errores cuando se agregan o eliminan columnas
🔗 Combinar ORDER BY con WHERE
Puedes filtrar datos con WHERE y luego ordenar los resultados:
SELECT nombre, departamento, salario
FROM empleados
WHERE salario > 40000
ORDER BY salario DESC;
Resultado: Solo empleados con salario mayor a 40,000, ordenados del más alto al más bajo.
❌ Valores NULL en el ordenamiento
Los valores NULL tienen un comportamiento especial en el ordenamiento:
- En orden ascendente (ASC): Los NULL aparecen primero en la mayoría de bases de datos
- En orden descendente (DESC): Los NULL aparecen al final
📋 Ordenar con datos de texto
El ordenamiento de texto sigue las reglas de colación de tu base de datos:
-- Ordenar alfabéticamente por apellido
SELECT nombre, apellido
FROM empleados
ORDER BY apellido ASC;
⚡ Casos de uso comunes de ORDER BY
| Situación | Consulta de ejemplo |
|---|---|
| Top 5 productos más vendidos | ORDER BY ventas DESC LIMIT 5 |
| Clientes por fecha de registro | ORDER BY fecha_registro DESC |
| Empleados por departamento y luego por nombre | ORDER BY departamento, nombre |
| Productos del más barato al más caro | ORDER BY precio ASC |
| Órdenes más antiguas no completadas | WHERE estado != 'completada' ORDER BY fecha ASC |
LIMIT o TOP, ORDER BY se vuelve extremadamente poderoso para obtener los "mejores" o "peores" registros de cualquier categoría.
🎯 Resumen de la lección
ORDER BYsiempre va al final de tu sentenciaSELECT- Por defecto, el orden es ascendente (ASC)
- Usa DESC para orden inverso
- Puedes ordenar por múltiples columnas separándolas con comas
- Cada columna puede tener su propia dirección de ordenamiento
- También puedes usar números de posición en lugar de nombres
- Combínalo con
WHEREpara filtrar antes de ordenar
ORDER BY es fundamental para presentar datos de manera útil. Casi toda consulta de reporte o análisis utiliza esta cláusula para organizar la información de forma significativa para el usuario final.
Pregunta 1: ¿Cuál es la sintaxis correcta para ordenar una tabla "productos" por la columna "precio" de mayor a menor?
- A) SELECT * FROM productos ORDER precio DESC;
- B) SELECT * FROM productos ORDER BY precio DESC;
- C) SELECT * BY ORDER productos precio DESC;
- D) SELECT * FROM productos SORT BY precio DESC;
SELECT * FROM productos ORDER BY precio DESC;La cláusula ORDER BY debe especificarse después del FROM, y DESC indica orden descendente.
Pregunta 2: Si quieres ordenar primero por "ciudad" y luego por "apellido", ¿cómo sería la consulta?
- A) ORDER BY ciudad, apellido
- B) ORDER BY apellido, ciudad
- C) ORDER ciudad, apellido
- D) SORT ciudad, apellido
ORDER BY ciudad, apellidoEl orden de las columnas en ORDER BY determina la prioridad: primero se ordena por ciudad, y dentro de cada ciudad por apellido.
📝 Ejercicios propuestos
Usando la tabla empleados que conociste en esta lección, practica con estos ejercicios:
- Escribe una consulta para obtener todos los empleados ordenados alfabéticamente por nombre.
- Obtén los empleados de mayor a menor salario.
- Lista los empleados por departamento (alfabético) y dentro de cada departamento, del más reciente al más antiguo por fecha de contratación.
- Muestra los empleados del departamento de "Ventas" ordenados por salario de forma descendente.
- Encuentra los tres empleados con el salario más alto.
-- Ejercicio 1
SELECT * FROM empleados ORDER BY nombre ASC;
-- Ejercicio 2
SELECT * FROM empleados ORDER BY salario DESC;
-- Ejercicio 3
SELECT * FROM empleados
ORDER BY departamento ASC, fecha_contratacion DESC;
-- Ejercicio 4
SELECT * FROM empleados
WHERE departamento = 'Ventas'
ORDER BY salario DESC;
-- Ejercicio 5
SELECT * FROM empleados
ORDER BY salario DESC
LIMIT 3;