lunes, 6 de diciembre de 2021

OUTER JOIN: definición, tipos y ejemplos

 Una sentencia JOIN DE SQL es una operación de consulta que enlaza varias tablas de una base de datos relacional y emite como respuesta los registros o tuplas filtrados según la condición de selección definida por el usuario.

El tipo de JOIN más común del Modelo de base de datos Relacional es el Inner Join de SQL, que, en la práctica, se utiliza cuando se quieren conectar dos tablas de una base de datos a partir de una columna en común. Cada registro de una tabla se fusiona con el registro correspondiente de la otra y quedan ocultos aquellos para los que el Sistema Gestor de Bases de Datos (SGBD) no puede encontrar una coincidencia.

Frente a esta sentencia, el OUTER JOIN no solo vuelca los registros de datos que cumplen la condición de selección en las dos tablas (por ejemplo, valores iguales en dos columnas), sino también las tuplas restantes de una u otra tabla.


Siguiendo la dirección de lectura de la sintaxis de SQL se habla de una tabla izquierda y una derecha. Las operaciones respectivas se denominan en consecuencia LEFT OUTER JOIN y RIGHT OUTER JOIN. Si, en una consulta, además de los registros que cumplen la condición de selección, también deseas obtener todos los registros de datos de la tabla izquierda y de la derecha, entonces se habla de un FULL OUTER JOIN.

Los diagramas de conjuntos permiten explicar el principio que hay tras las diferentes sentencias de JOIN:


Tipos de OUTER JOIN de SQL

Cada OUTER JOIN se ejecuta como LEFT, RIGHT o FULL OUTER JOIN.

Es común que los usuarios utilicen la fórmula abreviada LEFT JOIN, RIGHT JOIN y FULL JOIN.

LEFT OUTER JOIN

En un LEFT OUTER JOIN, la tabla en la parte izquierda del operador JOIN se considera la tabla dominante. En álgebra relacional, los LEFT OUTER JOIN se anotan con el siguiente operador: +

Para combinar las tablas “empleados” y “vehículos” en un LEFT OUTER JOIN, se puede utilizar la siguiente operación:

SELECT * FROM empleados , vhc where empleado.vhc_id = vhc.vhc_id (+);

La interacción con el SGBD se realiza en el lenguaje de la base de datos SQL. La fórmula anterior corresponde a la siguiente declaración SQL:

SELECT * FROM empleados LEFT JOIN vhc ON empleado.vhc_id = vhc.vhc_id;

La tabla “empleados” se sitúa a la izquierda del operador JOIN, y la tabla “vehículos”, a la derecha. Como condición de selección se establece empleado.vhc_id = vhc.vhc_id. El conjunto de resultados de un LEFT OUTER JOIN incluye solo los registros de la tabla derecha que cumplen la condición del JOIN y todos los resultados de la tabla de la izquierda. Es decir, de la tabla “vehículos” solo se seleccionarán aquellos registros de datos que en la columna vhc_id contengan un valor para el cual el SGBD encuentra un valor en la tabla “empleados”. 

Los valores que faltan en la tabla de resultados se muestran como valores nulos.


RIGHT OUTER JOIN

El RIGHT OUTER JOIN sigue el mismo principio que el LEFT OUTER JOIN, pero la tabla dominante aquí no es la de la izquierda, sino la de la derecha.

El conjunto de resultados de un RIGHT OUTER JOIN incluye todas las tuplas de la tabla del lado derecho del operador JOIN y las tuplas de la tabla izquierda que cumplen la condición JOIN. Como operador se muestra el símbolo +.

Se parte de nuevo de las tablas “empleados” y “vehículos”, utilizando la misma condición de selección que para el caso anterior.

En álgebra relacional:

SELECT * FROM empleados, vhc where empleado.vhc_id (+) = vhc.vhc_id;

Declaración SQL:

SELECT * FROM empleados RIGHT JOIN vhc ON empleado.vhc_id = vhc.vhc_id;

El registro de datos de la empleada Oliva Cansino no se muestra en la tabla de resultados, pues el vhc_id de la columna exterior tiene valor nulo y por lo tanto no puede asignarse a ningún registro de datos en la tabla de la derecha.

Como resultado del RIGHT JOIN obtenemos, por un lado, todos los registros de la tabla “vehículos”, incluido también el registro con el vhc_id 4, al que no se le ha podido asignar ninguna tupla de la tabla “empleados”. Los valores que faltan también se muestran aquí como valores nulos.

FULL OUTER JOIN

Un FULL OUTER JOIN es una combinación entre un LEFT OUTER JOIN y un RIGHT OUTER JOIN. Para la operación en álgebra relacional se utiliza el mismo operador que hasta ahora: 

También aclaramos el FULL JOIN a partir de las tablas “empleados” y “vehículos” y asumimos la misma condición de selección que antes.

Álgebra relacional:

Declaración SQL:

SELECT * FROM empleados FULL JOIN vhc ON empleados.vhc_id = vhc.vhc_id;

El FULL JOIN combina los registros de datos de las tablas “empleados” y “vehículos” de acuerdo con la condición de selección, aunque enumera no solo los registros de datos conectados en la tabla de resultados, sino también los registros de datos de ambas tablas que no cumplen la condición de selección.

NOTA:  ver ejemplo en la pagina original

fuentes

Artículo: "OUTER JOIN: definición, tipos y ejemplos" Publicado en https://www.ionos.es/ el 19.12.19. Consultado el 06/12/2021

URL https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/sql-outer-join/




No hay comentarios:

Publicar un comentario