La cláusula CASE
en SQL es una herramienta poderosa que permite manejar la lógica condicional directamente en consultas SQL.
Es similar a un “if-else” en programación.
CASE
WHEN condición THEN resultado
[WHEN condición_adicional THEN resultado_adicional]
[ELSE resultado_predeterminado]
END
CASE
: Inicia la cláusula, indicando que se va a evaluar una serie de condiciones.WHEN condición THEN resultado
: Cuando [se cumpla la condición], entonces [devuelve el resultado].[WHEN condición_adicional THEN resultado_adicional]
: Cuando [se cumpla otra condición adicional], entonces [devuelve el resultado adicional].
(Esto es opcional y se puede repetir varias veces).ELSE
: Si ninguna de las condiciones anteriores se cumple, entonces [devuelve el resultado predeterminado].
(Esto también es opcional).END
: Finaliza la cláusula CASE
.Tabla: estudiantes
id | nombre | calificacion |
---|---|---|
1 | Ana | 85 |
2 | Luis | 60 |
3 | María | 45 |
Consulta:
SELECT
nombre,
calificacion,
CASE
WHEN calificacion >= 75 THEN 'Excelente'
WHEN calificacion >= 50 THEN 'Regular'
ELSE 'Deficiente'
END AS categoria
FROM estudiantes;
Resultado:
nombre | calificacion | categoria |
---|---|---|
Ana | 85 | Excelente |
Luis | 60 | Regular |
María | 45 | Deficiente |
Tabla: productos
id | producto | precio |
---|---|---|
1 | Manzana | 100 |
2 | Plátano | 30 |
3 | Sandía | 200 |
Consulta:
SELECT
producto,
precio,
CASE
WHEN precio > 150 THEN '15% de descuento'
WHEN precio BETWEEN 50 AND 150 THEN '10% de descuento'
ELSE 'Sin descuento'
END AS descuento
FROM productos;
Resultado:
producto | precio | descuento |
---|---|---|
Manzana | 100 | 10% de descuento |
Plátano | 30 | Sin descuento |
Sandía | 200 | 15% de descuento |
Tabla: empleados
id | nombre | hora_entrada |
---|---|---|
1 | Juan | 08:00 |
2 | Pedro | 14:00 |
3 | Sofía | 22:00 |
Consulta:
SELECT
nombre,
hora_entrada,
CASE
WHEN hora_entrada < '12:00' THEN 'Turno Mañana'
WHEN hora_entrada < '18:00' THEN 'Turno Tarde'
ELSE 'Turno Noche'
END AS turno
FROM empleados;
Resultado:
nombre | hora_entrada | turno |
---|---|---|
Juan | 08:00 | Turno Mañana |
Pedro | 14:00 | Turno Tarde |
Sofía | 22:00 | Turno Noche |
Tabla: personas
id | nombre | ingresos |
---|---|---|
1 | Andrés | 50000 |
2 | Clara | 150000 |
3 | Miguel | 250000 |
Consulta:
SELECT
nombre,
ingresos,
CASE
WHEN ingresos <= 100000 THEN ingresos * 0.05
WHEN ingresos <= 200000 THEN ingresos * 0.10
ELSE ingresos * 0.15
END AS impuestos
FROM personas;
Tabla: inventario
id | producto | stock |
---|---|---|
1 | Lápiz | 5 |
2 | Cuaderno | 20 |
3 | Borrador | 0 |
Consulta:
SELECT
producto,
stock,
CASE
WHEN stock = 0 THEN 'Sin stock'
WHEN stock < 10 THEN 'Pocas unidades'
ELSE 'Stock suficiente'
END AS estado_stock
FROM inventario;
Tabla: pedidos
id | cliente | fecha_entrega |
---|---|---|
1 | Laura | 2024-11-29 |
2 | Carlos | 2024-12-01 |
3 | Diana | NULL |
Consulta:
SELECT
cliente,
fecha_entrega,
CASE
WHEN fecha_entrega IS NULL THEN 'Pendiente'
WHEN fecha_entrega > CURDATE() THEN 'En proceso'
ELSE 'Entregado'
END AS estado
FROM pedidos;
Tabla: reporte
id | categoria | valor |
---|---|---|
1 | A | 50 |
2 | B | 75 |
3 | C | 100 |
Consulta:
SELECT
categoria,
valor,
CASE categoria
WHEN 'A' THEN 'Bajo rendimiento'
WHEN 'B' THEN 'Rendimiento aceptable'
WHEN 'C' THEN 'Rendimiento excelente'
END AS mensaje
FROM reporte;
Tabla: empleados
id | nombre | años_experiencia |
---|---|---|
1 | Diego | 2 |
2 | Lucía | 5 |
3 | Fernando | 10 |
Consulta:
SELECT
nombre,
años_experiencia,
CASE
WHEN años_experiencia < 3 THEN 'Principiante'
WHEN años_experiencia BETWEEN 3 AND 7 THEN 'Intermedio'
ELSE 'Avanzado'
END AS nivel_experiencia
FROM empleados;
Resultado:
nombre | años_experiencia | nivel_experiencia |
---|---|---|
Diego | 2 | Principiante |
Lucía | 5 | Intermedio |
Fernando | 10 | Avanzado |
Tabla: productos
id | producto | tamaño |
---|---|---|
1 | Laptop | 14 |
2 | Televisor | 32 |
3 | Refrigerador | 60 |
Consulta:
SELECT
producto,
tamaño,
CASE
WHEN tamaño <= 15 THEN 'Pequeño'
WHEN tamaño <= 50 THEN 'Mediano'
ELSE 'Grande'
END AS categoria_tamaño
FROM productos;
Resultado: Clasificación de Productos por Tamaño
producto | tamaño | categoria_tamaño |
---|---|---|
Laptop | 14 | Pequeño |
Televisor | 32 | Mediano |
Refrigerador | 60 | Grande |
Tabla: ventas
id | vendedor | ventas_mes |
---|---|---|
1 | Urian | 50 |
2 | Brenda | 200 |
3 | Uriany | 350 |
SELECT
vendedor,
ventas_mes,
CASE
WHEN ventas_mes < 100 THEN 'Bajo'
WHEN ventas_mes BETWEEN 100 AND 300 THEN 'Medio'
ELSE 'Alto'
END AS rendimiento
FROM ventas;
Resultado: Rendimiento de Vendedores
vendedor | ventas_mes | rendimiento |
---|---|---|
Urian | 50 | Bajo |
Brenda | 200 | Medio |
Uriany | 350 | Alto |
La cláusula CASE
es increíblemente versátil y puede aplicarse en diversas situaciones para simplificar el manejo de lógica condicional en consultas SQL.