Clausula JOIN en Lenguaje SQL
https://analisisyprogramacionoop.blogspot.com/2024/04/clausula-join-en-
lenguaje-sql.html
Los JOINs en SQL sirven para combinar filas de dos o más tablas basándose
en un campo común entre ellas, devolviendo por tanto datos de diferentes
tablas. Un JOIN se produce cuando dos o más tablas se juntan en una
sentencia SQL.
En el gráfico que se muestra a continuación, cada tabla se representa como un
conjunto (diagrama de Venn) lo que nos da una idea de las filas de que tabla
devuelve cada JOIN diferente.
Unión de varias tablas.
Este es el JOIN más sencillo posible.
SELECT * FROM tabla1, tabla2;
SQL toma cada fila de la tabla1 y la une con todas las filas de la tabla2. Así que
si tenemos 8 filas en la tabla 1 y 5 en la tabla2 tendremos 8 * 5 = 40 filas. Es
decir hace un producto cartesiano.
¿Por qué ocurrió esto? SQL no sabe qué hacer con los resultados de las dos
tablas, así que, devolvió todas las combinaciones posibles. ¿Cómo podemos
cambiar este resultado?
SELECT * FROM tabla1, tabla2 WHERE tabla1.id_tabla1 = tabla2.id_tabla1;
Establecimos una nueva condición en la cláusula WHERE. Ahora, solo vemos
las conexiones en las que el id de la tabla1 es el mismo que el id_tabla1 de la
tabla 1 definido en la tabla2.
Si hay varias tablas, hay que referirse a las columnas indicando el nombre de la
tabla y de la columna separados por un punto (.). Así, la columna id_tabla1 de
la tabla2 se convierte en tabla2.id_tabla1 y, así, sucesivamente.
Se debe relacionar la clave primaria de cada tabla, así por ejemplo, el id de la
tabla1 aparece en la tabla2 en el campo id_tabla1.
Combinar dos tablas es una operación tan popular y frecuente que SQL
proporciona una palabra especial para ello: JOIN. Existen varios tipos de JOIN
Combinar tablas con JOIN
Observa el siguiente ejemplo:
SELECT * FROM Tabla_persona JOIN Tabla_coche ON Tabla_persona.id =
Tabla_coche.id_propietario;
Queremos combinar las tablas Tabla_persona y Tabla_coche, por lo que
utilizamos la palabra clave JOIN entre sus nombres.
SQL también necesita saber cómo combinar las tablas, así que, usamos otra
palabra clave (ON). Tras ella, establecemos nuestra condición: combinar
solamente aquellas filas en las que el id de persona sea el mismo que el
id_propietario de coche.
INNER JOIN
JOIN es, en realidad, solo uno de los diferentes métodos que existen para
hacer combinaciones en SQL. Es el más común, por lo que siempre se aplica
de forma predeterminada cuando se escribe la palabra clave JOIN en las
consultas de SQL. Pero, técnicamente hablando, su nombre completo es
INNER JOIN.
La consulta del ejercicio anterior también puede escribirse de la siguiente
manera:
SELECT * FROM Tabla_persona INNER JOIN Tabla_coche ON
Tabla_persona.id = Tabla_coche.id_propietario;
Las INNER JOIN (o JOIN) solo muestran las filas de las dos tablas en las que
las columnas coinciden. Solo se devuelven las personas que son propietarias
de un coche, y viceversa. Las personas que no son propietarios de un coche no
aparecen en el resultado.
Las personas que tienen el valor NULL en la columna id_propietario no
aparecen en el resultado de la INNER JOIN.
LEFT JOIN
Las LEFT JOIN devuelven todas las filas de la tabla izquierda (la primera tabla
de la consulta) más todas las filas que coinciden de la tabla derecha (la
segunda tabla de la consulta).
SELECT * FROM tabla1 LEFT JOIN tabla2 ON tabla1.id_tabla1 =
tabla2.id_tabla1;
RIGHT JOIN
Las RIGHT JOIN devuelven todas las filas de la tabla derecha (la segunda
tabla de la consulta) más todas las filas que coinciden de la tabla izquierda (la
primera tabla de la consulta).
SELECT * FROM tabla1 RIGHT JOIN tabla2 ON tabla1.id_tabla1 =
tabla2.id_tabla1;
La RIGHT JOIN devuelve todas las filas de la tabla anterior. El orden de las
tablas en las LEFT y RIGHT JOIN es importante. En otras palabras, tabla1
RIGHT JOIN tabla2 es lo mismo que tabla2 LEFT JOIN tabla1.
FULL JOIN
Este tipo de JOIN devuelve todas las filas de ambas tablas y combina las filas
cuando hay una coincidencia. Una FULL JOIN es una unión de una LEFT JOIN
y una RIGHT JOIN.
SELECT * FROM tabla1 FULL JOIN tabla2 ON tabla1.id_tabla1 =
tabla2.id_tabla1;
OUTER
Las tres combinaciones que acabamos de mencionar LEFT JOIN, RIGHT JOIN
y FULL JOIN son abreviaturas. Todas ellas son, en realidad, tipos de OUTER
JOIN (LEFT OUTER JOIN, RIGHT OUTER JOIN y FULL OUTER JOIN). Se las
puede añadir la palabra clave OUTER y los resultados de las consultas
seguirán siendo los mismos.
Por ejemplo, para la LEFT JOIN se podría escribir lo siguiente:
SELECT * FROM tabla1 LEFT OUTER JOIN tabla2 ON tabla1.id_tabla1 =
tabla2.id_tabla1;
NATURAL JOIN
No requiere la cláusula ON con la condición de la combinación:
SELECT * FROM tabla1 NATURAL JOIN tabla2;
Para los NATURAL JOIN no hace falta escribir los nombres de columnas,
porque siempre combinan las dos tablas en base a las columnas que tienen el
mismo nombre.
En este ejemplo, la tabla1 y la tabla2 se combinan en base a sus respectivas
columnas de id, lo que no tiene mucho sentido.
SELECT * FROM tabla1 NATURAL JOIN tabla2;
devuelve el mismo resultado que la siguiente consulta:
SELECT * FROM tabla1 JOIN tabla2 ON alumno.id_tabla1=
habitacion.id_tabla2;
Sin embargo, podemos crear las tablas de forma que las NATURAL JOIN sean
útiles. Si tuvieramos las siguientes tablas:
coche(id_coche, marca, modelo)
propietario(id_del_propietario, nombre, id_coche)
Entonces, tendría mucho sentido utilizar NATURAL JOIN, porque combinaría
las dos tablas en base a la columna id_coche. Por lo que, habría que escribir
menos para combinar las dos tablas.