Apuntes de BD para DAW, DAM y ASIR
José Juan Sánchez Hernández
Curso 2025/2026
LEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN (No implementada en MySQL)NATURAL LEFT OUTER JOINNATURAL RIGHT OUTER JOINEjemplo de LEFT OUTER JOIN:
Esta consulta devolverá todas las filas de la tabla que hemos
colocado a la izquierda de la composición, en este caso la tabla
empleado. Y relacionará las filas de la tabla de la
izquierda (empleado) con las filas de la tabla de la
derecha (departamento) con las que encuentre una
coincidencia. Si no encuentra ninguna coincidencia, se mostrarán los
valores de la fila de la tabla izquierda (empleado) y en
los valores de la tabla derecha (departamento) donde no ha
encontrado una coincidencia mostrará el valor NULL.
Ejemplo de RIGHT OUTER JOIN:
SELECT *
FROM empleado RIGHT JOIN departamento
ON empleado.codigo_departamento = departamento.codigoEsta consulta devolverá todas las filas de la tabla que hemos
colocado a la derecha de la composición, en este caso la tabla
departamento. Y relacionará las filas de la tabla de la
derecha (departamento) con las filas de la tabla de la
izquierda (empleado) con las que encuentre una
coincidencia. Si no encuentra ninguna coincidencia, se mostrarán los
valores de la fila de la tabla derecha (departamento) y en
los valores de la tabla izquierda (empleado) donde no ha
encontrado una coincidencia mostrará el valor NULL.
Ejemplo de FULL OUTER JOIN:
La composición FULL OUTER JOIN no está
implementada en MySQL, por lo tanto para poder simular esta
operación será necesario hacer uso del operador UNION, que
nos realiza la unión del resultado de dos consultas.
El resultado esperado de una composición de tipo
FULL OUTER JOIN es obtener la intersección de las dos
tablas, junto las filas de ambas tablas que no se puedan combinar. Dicho
con otras palabras, el resultado sería el equivalente a realizar la
union de una consulta de tipo LEFT JOIN y una consultas de
tipo RIGHT JOIN sobre las mismas tablas.
SELECT *
FROM empleado LEFT JOIN departamento
ON empleado.codigo_departamento = departamento.codigo
UNION
SELECT *
FROM empleado RIGHT JOIN departamento
ON empleado.codigo_departamento = departamento.codigoPara poder utilizar el operador UNION entre dos o más
consultas deberá tener en cuenta que:
Para ordenar los resultados tras aplicar una operación de
UNION existen dos soluciones:
ORDER BY.SELECT sobre
la que queremos ordenar los resultados y usarlo en el
ORDER BY.Ejemplo:
/* Solución 1 */
SELECT departamento.nombre, empleado.apellido1, empleado.apellido2, empleado.nombre
FROM empleado LEFT JOIN departamento
ON empleado.codigo_departamento=departamento.codigo
UNION
SELECT departamento.nombre, empleado.apellido1, empleado.apellido2, empleado.nombre
FROM empleado RIGHT JOIN departamento
ON empleado.codigo_departamento=departamento.codigo
ORDER BY 1, 2, 3, 4;/* Solución 2 */
SELECT
departamento.nombre AS nombre_departamento,
empleado.apellido1, empleado.apellido2, empleado.nombre
FROM empleado LEFT JOIN departamento
ON empleado.codigo_departamento=departamento.codigo
UNION
SELECT departamento.nombre, empleado.apellido1, empleado.apellido2, empleado.nombre
FROM empleado RIGHT JOIN departamento
ON empleado.codigo_departamento=departamento.codigo
ORDER BY nombre_departamento;Ejemplo de NATURAL LEFT JOIN:
Esta consulta realiza un LEFT JOIN entre las dos tablas,
la única diferencia es que en este caso no es necesario utilizar la
cláusula ON para indicar sobre qué columna vamos a
relacionar las dos tablas. En este caso las tablas se van a
relacionar sobre aquellas columnas que tengan el mismo nombre.
Por lo tanto, sólo deberíamos utilizar una composición de tipo
NATURAL LEFT JOIN cuando estemos seguros de que los nombres
de las columnas sobre las que quiero relacionar las dos tablas se llaman
igual en las dos tablas.
LEFT JOIN o
RIGHT JOIN no deberíamos tener varias condiciones en la
cláusula ON.Consulta incorrecta
SELECT *
FROM fabricante LEFT JOIN producto
ON fabricante.codigo = producto.codigo_fabricante AND
producto.codigo_fabricante IS NULL;Consulta correcta.
Esta
página forma parte del curso
Bases de Datos de
José Juan Sánchez Hernández y
su contenido se distribuye bajo una
licencia
Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0
Internacional.