Modelado físico avanzado relacional de bases de datos
Las funciones de control de flujo en SQL permiten tomar decisiones dentro de las consultas basándose en condiciones. Estas funciones son útiles para modificar los resultados dinámicamente, aplicar lógica condicional y manejar valores nulos.
1. CASE - Evaluación de Condiciones
La función CASE permite evaluar múltiples condiciones y devolver diferentes resultados.
Ejemplo Básico:
1SELECT nombre, salario, 2 CASE 3 WHEN salario > 50000 THEN 'Alto' 4 WHEN salario BETWEEN 30000 AND 50000 THEN 'Medio' 5 ELSE 'Bajo' 6 END AS categoria_salarial 7FROM empleados;
Esto clasifica los empleados según su salario.
Ejemplo con Comparación de Columnas:
1SELECT nombre, salario, departamento, 2 CASE departamento 3 WHEN 'IT' THEN 'Tecnología' 4 WHEN 'HR' THEN 'Recursos Humanos' 5 ELSE 'Otros' 6 END AS departamento_nombre 7FROM empleados;
Este código cambia el nombre de los departamentos en la salida.
2. IF() - Condicional Simple (Solo en MySQL y sqlite)
IF() permite evaluar una condición y devolver uno de dos valores.
Ejemplo:
1SELECT nombre, salario, IF(salario > 50000, 'Alto', 'Bajo') AS categoria_salarial 2FROM empleados;
Esto devuelve 'Alto' si el salario es mayor a 50,000 y 'Bajo' en caso contrario.
3. COALESCE() - Manejo de Valores Nulos
COALESCE() devuelve el primer valor no nulo de una lista de valores.
Ejemplo:
1SELECT nombre, COALESCE(telefono, 'No especificado') AS telefono 2FROM empleados;
Si telefono es NULL, se devuelve 'No especificado'.
4. NULLIF() - Comparar y Devolver NULL
NULLIF() devuelve NULL si dos valores son iguales; de lo contrario, devuelve el primer valor.
Ejemplo:
1SELECT nombre, NULLIF(salario, 0) AS salario_valido 2FROM empleados;
Si salario es 0, se devuelve NULL; de lo contrario, se devuelve su valor original.
5. GREATEST() y LEAST() - Comparación de Valores (No disponible en SQLite)
GREATEST(): Devuelve el valor más alto de una lista.LEAST(): Devuelve el valor más bajo de una lista.
Ejemplo:
1SELECT nombre, 2 GREATEST(edad, experiencia, 5) AS max_valor, 3 LEAST(edad, experiencia, 10) AS min_valor 4FROM empleados;
Esto compara edad y experiencia, devolviendo el mayor y menor valor, respectivamente.