Solución
Base de datos
Estrategía 1: Usar OUTER JOIN y WHERE
Algoritmo
- Inicializar la consulta SQL:
- Dado que la llave foranea
Bonus.empId
hace referencia aEmployee.empId
y algunos empleados no tienen bono, podemos usarOUTER JOIN
para enlazar esas dos tablas.
SELECT
Employee.name, Bonus.bonus
FROM Employee
LEFT OUTER JOIN Bonus
ON Employee.empid = Bonus.empid;
Nota:
LEFT OUTER JOIN
podrí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
WHERE
con 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;