Expresión CASE de MySQL
La expresión `CASE` en MySQL se utiliza para la lógica condicional en las consultas SQL, permitiéndote devolver valores específicos en función de diferentes condiciones. Funciona de forma similar a una sentencia if-else en los lenguajes de programación.
Utilización
La expresión `CASE` se utiliza para ejecutar lógica condicional en las consultas SQL, principalmente en las cláusulas `SELECT`, `UPDATE` y `ORDER BY`. Evalúa las condiciones en orden y devuelve un valor especificado cuando se encuentra la primera condición verdadera.
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END;
En esta sintaxis, `CASE` comprueba cada condición secuencialmente y devuelve el resultado correspondiente a la primera condición verdadera; si ninguna es verdadera, devuelve el resultado `ELSE`.
Ejemplos
1. Uso básico del caso
SELECT product_name,
CASE
WHEN stock_quantity > 0 THEN 'In Stock'
ELSE 'Out of Stock'
END AS stock_status
FROM products;
Este ejemplo evalúa la `cantidad_de_stock` y devuelve `En Stock` si la cantidad es mayor que cero, en caso contrario `Sin Stock`.
2. Afecciones múltiples
SELECT employee_name,
CASE
WHEN salary > 50000 THEN 'High Salary'
WHEN salary BETWEEN 30000 AND 50000 THEN 'Medium Salary'
ELSE 'Low Salary'
END AS salary_category
FROM employees;
En esta consulta, la expresión `CASE` categoriza a los empleados en bandas salariales, ofreciendo un control más granular sobre las etiquetas de salida.
3. Uso de CASE en ORDER BY
SELECT order_id, order_date
FROM orders
ORDER BY
CASE
WHEN order_status = 'Pending' THEN 1
WHEN order_status = 'Shipped' THEN 2
ELSE 3
END;
Aquí, la expresión `CASE` se utiliza para ordenar los resultados en función de `estado_pedido`, dando prioridad a "Pendiente", seguido de "Enviado" y, a continuación, a cualquier otro estado.
4. Utilizar CASE en UPDATE
UPDATE employees
SET salary_category =
CASE
WHEN salary > 50000 THEN 'High Salary'
WHEN salary BETWEEN 30000 AND 50000 THEN 'Medium Salary'
ELSE 'Low Salary'
END;
Este ejemplo muestra cómo se puede utilizar `CASE` en una sentencia `UPDATE` para establecer el campo `salary_category` en función de diferentes rangos salariales.
Consejos y buenas prácticas
- Garantiza la integridad. Incluye siempre una cláusula `ELSE` para tratar los casos inesperados o nulos, mejorando la solidez de la consulta.
- Simplifica las condiciones. Simplifica las condiciones dentro de `CASE` para mantener la legibilidad y reducir los errores.
- Utiliza tipos de datos adecuados. Asegúrate de que los tipos de datos de los resultados en las cláusulas `THEN` y `ELSE` son coherentes para evitar errores.
- Optimiza el rendimiento. Coloca primero las condiciones verdaderas más probables para minimizar el tiempo de evaluación y mejorar el rendimiento de la consulta.
- Normas SQL. La expresión `CASE` de MySQL se adhiere a los estándares SQL, garantizando la compatibilidad entre diferentes bases de datos SQL.