La operación JOIN es muy usada en las bases de datos relacionales, pues nos permite sacar provecho de las relaciones entre las tablas.
Es la responsable de unir las filas de dos tablas. Una unión no es una simple concatenación, si no que se realiza segun algun parámetro que definamos. Veamos un ejemplo.
sql<left_table> JOIN <right_table> ON <left_table>.value = <right_table>.value
La operación JOIN
devuelve una tabla y esta la podemos colocar en lugar de una tabla en la consulta SELECT. También podemos hacer un JOIN entre la tabla resultante de un JOIN y otra.
La cláusula ON
define los parámetros según los cuales las filas de las diferentes tablas se unirán. Aunque lo más normal es unir tablas mediante una relación de clave externa, se pueden usar otras condiciones. Siempre que la condición genere un valor True
, las dos filas se unirán en la tabla resultante.
Si dos tablas se unen con una condición que siempre es True, todas las filas de la tabla Left
se emparejarán con todas las filas de la tabla Right
.
🤝 Tipos de Join
Los diferentes tipos de JOIN son importantes para saber cuál será la estrategia a seguir con los valores nulos.
Las tablas que se utilizarán en los diferentes ejemplos de operación JOIN son las siguientes:
Left Table
id | name |
---|---|
1 | Pepe |
2 | Marina |
3 | Sarah |
Right Table
id | job_type |
---|---|
2 | lawyer |
3 | teacher |
4 | scuba diver |
👈🏽👉🏽 Left y Right Join
Si hacemos un Left o Right join, estaremos favoreciendo una de estas tablas. En ese caso todos los elementos de la tabla seleccionada estarán en la tabla resultante. Aquellos que no posean un equivalente en la otra tabla tendrán esos valores sustituidos por nulos.
sqlSELECT * FROM <left_table> LEFT JOIN <right_table> ON <left_table>.id = <right_table>.id
La tabla resultante tendría todas las filas de Left
, pero en aquellos casos que no hay una fila de Right
que cumpla la condición, el valor para right_table.id
será NULL
.
left_table.id | name | right_table.id | job_type |
---|---|---|---|
1 | Pepe | NULL | NULL |
2 | Marina | 2 | lawyer |
3 | Sarah | 3 | teacher |
El Right Join nos daria otro resultado.
sqlSELECT * FROM <left_table> RIGHT JOIN <right_table> ON <left_table>.id = <right_table>.id
left_table.id | name | right_table.id | job_type |
---|---|---|---|
2 | Marina | 2 | lawyer |
3 | Sarah | 3 | teacher |
NULL | NULL | 4 | scuba diver |
🕸️ Full Outer Join
El Full Outer Join es la unión entre ambos Left y Right Join. Todas las filas de ambas tablas estarán presentes en el resultado, y en todos los casos en que la condición no se haya cumplido, habrá un nulo.
sqlSELECT <left_table>.id, <right_table>.id FROM <left_table> FULL OUTER JOIN <right_table> ON <left_table>.id = <right_table>.id
left_table.id | name | right_table.id | job_type |
---|---|---|---|
1 | Pepe | NULL | NULL |
2 | Marina | 2 | lawyer |
3 | Sarah | 3 | teacher |
NULL | NULL | 4 | scuba diver |
🔗 Inner Join
A diferencia de los tipos de JOIN anteriores, en el INNER JOIN no habrá valores nulos, ya que solo se considerarán las filas en las que se cumpla la condición establecida.
sqlSELECT <left_table>.id, <right_table>.id FROM <left_table> JOIN <right_table> ON <left_table>.id = <right_table>.id
left_table.id | name | right_table.id | job_type |
---|---|---|---|
2 | Marina | 2 | lawyer |
3 | Sarah | 3 | teacher |
🆔 Alias de tabla
Cuando queremos hacer muchas operaciones JOIN, el proceso puede tornarse muy verboso, pues necesitamos especificar el origen de las columnas que tengan el mismo nombre. En este caso es muy útil el uso de los alias para poder facilitar el proceso. Simplemente indicamos con AS <alias>
el nombre que queremos dar como Alias a esa tabla.
sqlSELECT lt.name, rt.job_type FROM left_table AS lt JOIN right_table AS rt ON lt.id = rt.id;
Al usar AS lt
y AS rt
, estamos dando un alias a cada tabla para referirnos a ellas más fácilmente en la consulta. El resultado será una tabla que contiene el nombre de cada persona y su trabajo correspondiente:
name | job_type |
---|---|
Marina | lawyer |
Sarah | teacher |
Ya que esas son las únicas filas donde se cumple la condición lt.id = rt.id
.
Bootcamp Python y Data Analytics
Bootcamp Python y Data Analytics