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.