Apuntes de BD para DAW, DAM y ASIR
José Juan Sánchez Hernández
Curso 2023/2024
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
(No implementada en MySQL)NATURAL LEFT OUTER JOIN
NATURAL RIGHT OUTER JOIN
Ejemplo 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.codigo
Esta 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.codigo
Para 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.