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.