Solución - Bono de empleados
Base de datos
Estrategía 1: Usar OUTER JOIN y WHERE
Algoritmo
- Inicializar la consulta SQL:
- Dado que la llave foranea
Bonus.empIdhace referencia aEmployee.empIdy algunos empleados no tienen bono, podemos usarOUTER JOINpara enlazar esas dos tablas.
SELECT
Employee.name, Bonus.bonus
FROM Employee
LEFT OUTER JOIN Bonus
ON Employee.empid = Bonus.empid; Nota:
LEFT OUTER JOINpodría ser escrito comoLEFT JOIN.
El resultado, con los datos del ejemplo se muestra enseguida.
| name | bonus |
|--------|-------|
| Dan | 500 |
| Thomas | 2000 |
| Brad | |
| John | | Brad y John no tienen bono (el valor de la columna es NULL en la base de datos). Conceptualmente, NULL significa “un valor desconocido no existente” y se maneja de alguna forma especial. Véase el artículo Trabajando con valores NULL en MySQL para
mas detalles. Además de lo anterior, tenemos que usar IS NULL o IS NOT NULL para comparar un valor con
`NULL.
- Por último, podemos agregar la cláusula
WHEREcon las condiciones adecuadas para filtrar esas filas.
Implementación
SELECT
Employee.name, Bonus.bonus
FROM
Employee
LEFT JOIN
Bonus ON Employee.empid = Bonus.empid
WHERE
bonus < 1000 OR bonus IS NULL;