Ordenar datos con ORDER BY

Lectura
15 min~7 min lectura

📊 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.

CONCEPTO CLAVE
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
AnaMartínez38000
MaríaGarcía45000
LuisPérez41000
ElenaFernández48000
CarlosRodríguez52000

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;
💡 Tip práctico: Utiliza 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;
⚠️ Precaución: El formato de fecha puede variar según el sistema de base de datos. MySQL usa 'YYYY-MM-DD', mientras que SQL Server puede usar 'MM/DD/YYYY'. Siempre verifica el formato de tu base de datos para evitar errores.

🔢 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?

  1. Primero, SQL ordena por la primera columna especificada (departamento).
  2. Después, dentro de cada grupo, ordena por la segunda columna (salario).
  3. Esto permite crear subordenamientos dentro de categorías.

Resultado esperado:

nombre departamento salario
LuisRecursos Humanos41000
CarlosMarketing52000
ElenaMarketing48000
MaríaVentas45000
AnaVentas38000
"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."
📌 Nota importante: Cada columna en 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;
💡 Tip: Ordenar por posición es útil en consultas rápidas o cuando trabajas con expresiones complejas. Sin embargo, se recomienda usar nombres de columna para mayor claridad y mantenimiento del código.
Ver más: ¿Cuándo usar posición en lugar de nombre?

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
⚠️ Importante: Este comportamiento puede variar entre diferentes sistemas de bases de datos (MySQL, PostgreSQL, SQL Server, Oracle). Si necesitas controlar explícitamente la posición de los NULL, consulta la documentación específica de tu SGBD, ya que cada uno tiene su propia sintaxis para esto.

📋 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;
📌 Dato curioso: La colación determina si las mayúsculas se distinguen de las minúsculas. En la mayoría de bases de datos, 'A' y 'a' se tratan como iguales en orden alfabético. Pero con colaciones binarias, el orden podría ser diferente.

⚡ 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
💡 Tip profesional: En combinación con 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

  1. ORDER BY siempre va al final de tu sentencia SELECT
  2. Por defecto, el orden es ascendente (ASC)
  3. Usa DESC para orden inverso
  4. Puedes ordenar por múltiples columnas separándolas con comas
  5. Cada columna puede tener su propia dirección de ordenamiento
  6. También puedes usar números de posición en lugar de nombres
  7. Combínalo con WHERE para filtrar antes de ordenar
CONCEPTO CLAVE
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.
🧠 Quiz: ¿Qué aprendiste?

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;
✅ Respuesta correcta: B) 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
✅ Respuesta correcta: A) ORDER BY ciudad, apellido
El 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:

  1. Escribe una consulta para obtener todos los empleados ordenados alfabéticamente por nombre.
  2. Obtén los empleados de mayor a menor salario.
  3. 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.
  4. Muestra los empleados del departamento de "Ventas" ordenados por salario de forma descendente.
  5. Encuentra los tres empleados con el salario más alto.
Ver soluciones
-- 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;
📌 Próxima lección: En la siguiente lección aprenderás sobre Filtrado avanzado con WHERE, donde descubriremos operadores de comparación y condiciones más sofisticadas para refinar tus consultas.