[SQL 03] Ordenar, alias, concatenar y CASE
- Ordenar por una o varias columnas, ascendente o descendente, y ubicar los
NULL. - Obtener los top-N y paginar resultados con
LIMITyOFFSET. - Construir textos concatenando columnas (
||/CONCAT). - Clasificar filas con expresiones
CASE WHEN … THEN … ELSE … END.
Sin ORDER BY, el orden de las filas no está garantizado. ORDER BY ordena por
una o más columnas (o expresiones o alias), en orden ascendente (ASC, por defecto) o descendente
(DESC). Combinado con LIMIT permite obtener «los 5 mejores» y paginar.
Para unir textos, el estándar SQL (Oracle, PostgreSQL, SQLite) usa el operador ||; MySQL usa la
función CONCAT().
CASE es el «si… entonces…» de SQL: evalúa condiciones en orden y devuelve el valor de la
primera que se cumple. Sirve para clasificar, traducir códigos o calcular según reglas de negocio.
Orden lógico de evaluación: FROM → WHERE → SELECT → ORDER BY → LIMIT. Por eso en
ORDER BY sí puedes usar un alias del SELECT, pero en WHERE no.
SELECT col1 || ' ' || col2 AS texto,
CASE WHEN cond1 THEN valor1
WHEN cond2 THEN valor2
ELSE valor3 END AS categoria
FROM tabla
ORDER BY col3 DESC, col1 ASC
LIMIT n OFFSET m;first_name || ' ' || last_name une textos.first_name || ' ' || last_nameCONCAT(first_name, ' ', last_name)OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY1 · Ejemplos guiados · ejecuta y modifica cada bloque
|| une textos; ordenamos por el alias.NULLS LAST.⚠ Errores frecuentes
- Usar
LIMITsinORDER BY: «los primeros 5» no tiene sentido si el orden no está definido. - Ordenar por salario con empates y esperar un orden fijo: agrega una segunda columna para desempatar.
- Usar el alias en el
WHERE:WHERE salario_anual > 100000falla porque WHERE se evalúa antes que SELECT. - Olvidar el
ENDde unCASE, o poner condiciones en un orden en que la primera «tapa» a las demás. - Concatenar con
+(SQL Server) en SQLite u Oracle: suma números en vez de unir textos.
2 · Retos con corrección automática
Escribe tu solución y pulsa comprobar (Ctrl + Enter). Tu consulta y la solución se ejecutan en bases limpias y se comparan los resultados: no importan los nombres de las columnas, sí los datos (y el orden, cuando el reto lo pide). Si te atascas, usa la pista o mira el resultado esperado.
3 · Preguntas tipo solemne
CONCAT(); el estándar (Oracle, PostgreSQL, SQLite) usa ||.ORDER BY salary DESC LIMIT 3 OFFSET 3?