Tipos de JOIN
Tipos de JOIN
● INNER JOIN: Devuelve todas las filas cuando hay al menos una coincidencia en ambas
tablas.
● LEFT JOIN: Devuelve todas las filas de la tabla de la izquierda, y las filas coincidentes
de la tabla de la derecha.
● RIGHT JOIN: Devuelve todas las filas de la tabla de la derecha, y las filas coincidentes
de la tabla de la izquierda.
● FULL JOIN: Devuelve todas las filas de las dos tablas, la izquierda y la derecha aún
cuando no tengan coincidencias. También se llama FULL OUTER JOIN.
Otros tipos de join que existen son CROSS JOIN, O SELF JOIN, pero no todos ellos están
soportados por todos los sistemas de bases de datos.
INNER JOIN
Selecciona todas las filas de las dos tablas siempre y cuando haya una coincidencia
entre los valores de las columnas en ambas tablas. Es el tipo de JOIN más común. Con el inner
join se pueden obtener los registros de la tabla dirección uniéndose con los registros de la
tabla persona en donde los campos dni sean iguales:
Por ende no hay registros que coincidan con Erika y Pedro causando que sean descartados.
No es necesario obtener todas las columnas, se pueden obtener solo las deseadas así como
también aplicar restricciones con where y usar funciones de agregación:
LEFTJOIN
Selecciona todas las filas de la tabla izquierda y las filas de la tabla derecha se
mostrarán si hay una coincidencia con las de la izquierda. Si existen valores en la tabla
izquierda pero no en la tabla derecha, esta mostrará null. Dicho de otra manera es seleccionar
todos los registros de la tabla izquierda del join y si algún registro de la tabla a la derecha del
join coincide con los campos de la tabla de la izquierda entonces también son seleccionados,
de no encontrarse se obtienen valores nulos.
Solo los registros de Pedro y Erika tienen el valor direccion.dni nulo (cuando se preguntan por
valores nulos no se coloca = null sino que se usa la expresion is null).
RIGTH JOIN
Es igual que LEFT JOIN pero al revés. Ahora se mantienen todas las filas de la tabla
derecha y las filas de la tabla izquierda se mostrarán si hay una coincidencia con las de la
derecha. Si existen valores en la tabla derecha pero no en la tabla izquierda, ésta se mostrará
null.
select * from persona right join direccion on persona.dni = direccion.dni;
Se muestran los dos registros de la tabla de la derecha (direccion) y se muestran los registros
de la tabla de la izquierda (persona) solo si existe una coincidencia en los valores de las
columnas dni de ambas tablas. Solo existen direcciones en la tabla de la derecha para Jose y
Maria por ende Erika y Pedro son descartados. De haber más registros en dirección con
campos dni que no coincidan con los campos dni de persona entonces se mostraría a la
izquierda valores nulos.
Left y Right hacen referencia al orden que tengan las tablas en el join, es decir, si se tiene:
Left es direccion y right es persona, por lo que estos dos querys obtendrían el mismo resultado
y solo cambiaría el orden en que se muestran las columnas de las tablas:
En el esquema editorial no se presenta esta situación es por ello que se muestra el siguiente
ejemplo en la herramienta sqlfiddle: http://sqlfiddle.com/#!17/cf1fb/5, se debe pulsar el
botón "build schema" y luego el botón "Run SQL" para ejecutar la consulta. (Si resulta que el
proyecto de prueba en fiddle http://sqlfiddle.com/ se ha eliminado o no existe se debe usar
el archivo sqlfiddle_full_join.sql siguiendo las instrucciones en el mismo).
Al ejecutar la consulta se puede apreciar que cada tabla tiene 4 registros y que al ejecutarse
el full join el resultado es que se retornan 6 registros ya que los nombres pedro y juan
coinciden pero los demás no, por ende se muestran nulos los valores a la derecha o a la
izquierda según correspondan.
Consultando relaciones
Los joins ayudan a obtener información de las tablas relacionadas, si se quieren ver
las revistas y sus tipos de revistas se puede ejecutar la consulta:
Se une la tabla revista con la tabla tipos_revista por el campo nombre, de la tabla revista se
selecciona el campo nombre y de la tabla tipos_revista se selecciona el nombre (indicando
que se le llamará a la columna en el resultado "tipo") y la descripción. Se una por los campos
tipos_revista.nombre y revista.nombre_tipo_revista ya que el último campo
(nombre_tipo_revista) es la clave foránea que tiene la tabla revista que hace referencia a la
tabla tipos_revista con el campo nombre, dicho de otra manera la tabla revista guarda la
asociación con el tipo de revista en la columna nombre_tipos_revista.
A veces se necesitan unir varias tablas para obtener la información, si se quiere obtener las
personas y las revistas a las que están asociadas se tiene que unir tres tablas, ya que la tabla
que mantiene la relación entre persona y revista es persona_revista, se debe unir primero la
tabla persona con persona_revista y luego la tabla revista con persona_revista (recordando
que la relación entre personas y revistas es de muchos a muchos):
Otro ejemplo de unión para obtener los telefonos de las personas sería: