Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 9

Existen varios tipos de JOIN, los más comunes son:

● 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:

select * from persona inner join direccion on persona.dni = direccion.dni;


Fueron seleccionadas todas las columnas de persona así como de dirección y se obtuvieron
sólo los registros donde (on) coincidieron los valores de los campos dni. Pedro y Erika no se
ven en el listado porque no tienen dirección asociada, en la tabla dirección hay dos registros
uno con el dni de José y otro con el dni de María:

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:

select persona.dni,calle from persona inner join direccion on persona.dni =


direccion.dni where numero = 10;
Nota: en este caso ambos registros tienen en el campo numero 10 por ende entran en la
condición del where.

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.

select * from persona left join direccion on persona.dni = direccion.dni;


Se puede apreciar que se obtuvieron todos los registros de la tabla de la izquierda (persona)
y que además se obtuvieron los registros de la tabla de la derecha (direccion) únicamente
donde coincidieron los dni, como Pedro y Erika no tienen dirección asociada entonces esos
valores retornaron datos nulos. Haciendo este tipo de consultas se pueden obtener las
personas que no tienen dirección de la siguiente manera:

select * from persona left join direccion on persona.dni = direccion.dni where


direccion.dni is null;

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:

select * from persona left join direccion on persona.dni = direccion.dni;

Left es persona y right dirección, ahora si se tiene:

select * from direccion left join persona on persona.dni = direccion.dni;

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:

select * from persona left join direccion on persona.dni = direccion.dni;

select * from direccion right join persona on persona.dni = direccion.dni;


FULL JOIN

Devuelve todas las filas de la tabla izquierda y de la tabla derecha. Combina el


resultado de los joins LEFT y RIGHT. Aparecerá null en cada una de las tablas alternativamente
cuando no haya una coincidencia. Es decir se obtendrán todos los registros de la tabla de la
izquierda y los registros de la tabla de la derecha, si un registro de la tabla de la izquierda no
tiene coincidencias en la derecha esos campos se retornaran nulos, si un registro de la tabla
de la derecha no tiene coincidencias en la izquierda esos campos se retornaran nulos.

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:

select revista.nombre, tipos_revista.nombre as tipo, tipos_revista.descripcion from


revista inner join tipos_revista on tipos_revista.nombre = revista.nombre_tipo_revista;

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):

select persona.nombre, revista.nombre from persona


inner join persona_revista on persona.dni = persona_revista.dni
inner join revista on persona_revista.serial = revista.serial;
Esta selección puede ser aplicada con un left join para obtener todas las personas así no
tengan revista:

select persona.nombre, revista.nombre from persona


left join persona_revista on persona.dni = persona_revista.dni
left join revista on persona_revista.serial = revista.serial;

Otro ejemplo de unión para obtener los telefonos de las personas sería:

select persona.nombre, persona_telefono.telefono from persona inner join


persona_telefono on persona.dni = persona_telefono.dni;
Un dato importante es que todas estas uniones se hacen con el campo clave o la primary de
las tablas y las claves foráneas de las mismas ya que eso asegura la asociación correcta.

Utilice la siguiente herramienta para practicar las consultas con SQL:


https://sqlzoo.net/wiki/SELECT_basics nótese que en el panel de la izquierda existe un menú
con varios tipos de consultas.

También podría gustarte