Puedes ejecutar cualquier consulta SQL en nuestra consola interactiva: Abrir consola SQL →
CASE en SQL: lógica condicional dentro de consultas
La expresión CASE permite crear condiciones dentro de una consulta SQL. Es equivalente a un “if / else” y se usa para clasificar, transformar y generar columnas calculadas.
Tabla de contenidos
1. ¿Qué es CASE?
CASE permite evaluar condiciones y devolver valores diferentes según el resultado. Es la forma de SQL de implementar lógica condicional.
SELECT nombre,
CASE
WHEN edad >= 18 THEN 'Adulto'
ELSE 'Menor'
END AS categoria
FROM usuarios;
2. Estructura de CASE
CASE
WHEN condición THEN resultado
WHEN condición THEN resultado
ELSE resultado
END
3. CASE simple
SELECT nombre,
CASE ciudad
WHEN 'Madrid' THEN 'Centro'
WHEN 'Barcelona' THEN 'Cataluña'
ELSE 'Otra zona'
END AS zona
FROM usuarios;
4. CASE con condiciones múltiples
SELECT nombre, edad,
CASE
WHEN edad < 18 THEN 'Menor'
WHEN edad BETWEEN 18 AND 65 THEN 'Adulto'
ELSE 'Jubilado'
END AS categoria
FROM usuarios;
5. CASE dentro de ORDER BY
CASE también puede usarse para ordenar resultados de forma personalizada.
SELECT nombre, ciudad
FROM usuarios
ORDER BY
CASE ciudad
WHEN 'Madrid' THEN 1
WHEN 'Barcelona' THEN 2
ELSE 3
END;
6. Ejemplos prácticos
SELECT producto, precio,
CASE
WHEN precio < 20 THEN 'Barato'
WHEN precio BETWEEN 20 AND 50 THEN 'Medio'
ELSE 'Caro'
END AS categoria
FROM productos;
SELECT nombre, salario,
CASE
WHEN salario IS NULL THEN 'Sin datos'
ELSE 'Registrado'
END AS estado_salario
FROM empleados;
7. Ejercicios para practicar
- Crea una columna “nivel_precio” según rangos.
- Crea una columna “tipo_usuario” según edad.
- Clasifica ciudades en “Norte”, “Centro” y “Sur”.
- Usa CASE dentro de ORDER BY.
- Explica para qué sirve CASE.
SELECT nombre, precio,
CASE
WHEN precio < 10 THEN 'Bajo'
WHEN precio BETWEEN 10 AND 30 THEN 'Medio'
ELSE 'Alto'
END AS nivel_precio
FROM productos;
SELECT nombre, edad,
CASE
WHEN edad < 18 THEN 'Menor'
WHEN edad BETWEEN 18 AND 65 THEN 'Adulto'
ELSE 'Mayor'
END AS tipo_usuario
FROM usuarios;
SELECT ciudad,
CASE
WHEN ciudad IN ('Bilbao','Santander') THEN 'Norte'
WHEN ciudad IN ('Madrid','Toledo') THEN 'Centro'
ELSE 'Sur'
END AS zona
FROM usuarios;
SELECT nombre, ciudad
FROM usuarios
ORDER BY
CASE ciudad
WHEN 'Madrid' THEN 1
WHEN 'Barcelona' THEN 2
ELSE 3
END;
-- CASE sirve para crear lógica condicional dentro de SQL.
8. Mini‑proyecto: Clasificación de productos
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre VARCHAR(50),
precio DECIMAL(10,2)
);
INSERT INTO productos VALUES
(1, 'Camiseta', 19.99),
(2, 'Pantalón', 29.99),
(3, 'Chaqueta', 59.99);
SELECT nombre, precio,
CASE
WHEN precio < 20 THEN 'Barato'
WHEN precio BETWEEN 20 AND 50 THEN 'Medio'
ELSE 'Caro'
END AS categoria
FROM productos;
9. Errores comunes
- No incluir ELSE cuando es necesario.
- Crear condiciones que se solapan.
- Usar CASE sin END.
- Olvidar alias para la columna generada.
10. Preguntas frecuentes
¿CASE es como un IF?
Sí, es la forma SQL de hacer lógica condicional.
¿Puedo usar CASE en cualquier parte?
Sí: SELECT, ORDER BY, GROUP BY, HAVING…