Los inner join- Giovanna Miramontes 3aps Cecyte bc

25
LOS INNER JOIN

description

los inner join habalremos sobre ellos con agunos ejemplo

Transcript of Los inner join- Giovanna Miramontes 3aps Cecyte bc

Page 1: Los inner join- Giovanna Miramontes 3aps Cecyte bc

LOS INNER JOIN

Page 2: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Que son los Inner Join?

Es otro tipo de composicion de tablas que permite emparejar filas de distintas tablas de foma mas eficiente

Page 3: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Como funciona el inner join?

Suponte que tienes una tabla T1 con un campo codigo_horarios 

y la tabla maestra horarios con los campos 

clave_horarios y dtescri_horarios y necesitas el segundo campo "descri_horarios" 

entonces tienes 

SELECT ...., T1.codigo_horarios , horarios.descri_horarios 

FROM T1 INNER JOIN horarios 

ON T1.codigo_horarios = horarios.clave_horarios WHERE .... 

es decir, el INNER JOIN te sirve para traer datos auxiliares... 

Page 4: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Tipos de joins tenemos tipos de Join que funcionarán en

Transact, propio de MS SQL Server, y que sólo cambian ciertas partes de la sintaxis  para los demás lenguajes ojo todos al final hacen lo mismo, las bases son iguales, tenemos 2 tipos de Join (por definición almenos) los Joins Internos  o de Combinación interna (Inner Join) y los Joins Externos o Combinación externa (Outer Join) que a su vez tienen sus diferencias dentro de cada uno de ellos

Page 5: Los inner join- Giovanna Miramontes 3aps Cecyte bc

los Joins Internos

1. Internos (Inner Join) De Equivalencia (Equi – Join) Natural (Natural – Join) Cruzado (Cross – Join) En sí mismo (Self – Join)

Page 6: Los inner join- Giovanna Miramontes 3aps Cecyte bc

De equivalencia(externos)

2. Externos (Outer Join) De tabla Izquierda (Left Outer Join) De tabla Derecha (Right Outer Join) Combinación completa (Full Outer Join)

Page 7: Los inner join- Giovanna Miramontes 3aps Cecyte bc

INNER JOIN El Inner Join te permite combinar dos tablas

mediante un campo en común  para hacer relaciones y consultas en este ejemplo vamos a utilizar un Inner Join para unir las tablas 1 y 2, Funciona así:

SELECT tabla.(campo que quieres mostrar)FROM Tabla1 (Alias -opcional-)  INNER JOIN  Tabla2 (Alias – opcional-)ON Tabla1(o Alias).NombreCampo(campo en común) <,>,= (comparación)  Tabla2(o Alias).NombreCampo(campo en común)

Page 8: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Ejemplo:

-Con Alias SELECT * FROM Tabla1 T1 INNER JOIN Tabla2 T2 ON T1.IdLetra = T2.IdLetra

Inner Join Tabla 1 y Tabla2 (sin alias) --Sin Alias SELECT * FROM Tabla1

INNER JOIN Tabla2 ON Tabla1.IdLetra = Tabla2.IdLetra

Page 9: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Como te das cuenta en la parte donde va el asterisco (*) es donde se piden los campos de las dos tablas relacionadas como ves aquí se trae todos los campos, pero si hubiera algunos en especifico que quieras mostrar escribes “tabla.campo” y eliges cuales quieres, mas adelante en esta consulta vemos que se escribe un nombre corto al costado del nombre de la tabla este es el Alias , luego de esto ya la tabla tiene asignado un nombre Alias y sólo se le llamará mediante este nombre corto igual que como se hacia con su nombre completo; finalmente vemos la comparación después de la palabra reservada ON que en este caso es “=” también podría ser >,<, etc.  como algo adicional al inicio también puedes usar el alias (en el lugar donde va el asterisco) de esta manera:

Page 10: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Ejemplo:

SELECT T1.Valor1,T2.Valor2,T2.IdLetra FROM Tabla1 T1 INNER JOIN Tabla2 T2 ON T1.IdLetra =T2.IdLetra

Page 11: Los inner join- Giovanna Miramontes 3aps Cecyte bc

De equivalencia

En este tipo es una especie de theta-join donde se hace una comparación de Igualdad por lo tanto si el inner join es comparado con < , > estos no entrarían en esta categoría

--EQUI JOIN SELECT * FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.IdLetra=Tabla2.IdL

Page 12: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Natural-join

Propiamente en SQL no se puede hacer Natural Join pero es simple de explicar, el Natural Join te da los valores y elimina los campos repetidos en la relación establecida quedando como el ejemplo donde especifique el uso de alias al principio de la Query, lo puedes ver aquí donde solo muestro uno de los dos campos  IdLetra, esto daría un Natural Join:

--NATURAL JOIN SELECT T1.IdLetra ,T1.Valor1, T2.Valor2 FROM Tabla1 T1 INNER JOIN Tabla 2 T2 ON T1.IdLetra =T2.IdLetra

Page 13: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Crusado ( croos-join

- Cruzado (Cross-Join) El Cross Join nos permite hacer un producto

cartesiano entre las tablas que estamos comparando, también se puede dar de manera Implicita lo que llaman el operador proyección, al final funcionan igual:

---CROSS JOIN NORMAL SELECT * FROM Tabla1 CROSS JOIN Tabla2 SELECT Tabla1.IdLetra,Tabla1.Valor1,Tabla2.Valor2 FROM Tabla1 CROSS JOIN Tabla2 ---CROSS JOIN IMPLICITO SELECT * FROM Tabla1 ,Tabla2 SELECT Tabla1.IdLetra,Tabla1.Valor1,Tabla2.Valor2 from Tabla1,Tabla2

Page 14: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Asi misma( self-join)

- A sí misma (Self-Join) Este es un tipo un tanto raro de Join

pero quien sabe la necesidad de tus consultas y necesites implementarla en una, esta te permite hacer un producto cartesiano de la tabla pero consigo misma osea un Auto Cross Join:

--SELF JOIN SELECT * FROM Tabla1 SELF JOIN Tabla1 ON Tabla1.IdLetra=Tabla1. IdLetra

Page 15: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Outer join

En el Outer Join la diferencia es que en este tipo de combinación se mantienen los valores que no tienen equivalente en la otra tabla, esto no sucede en el Inner Join que cuando las tablas no tienen valores equivalentes la relación botaría NULL en el resultado y este es omitido por defecto, hay maneras de conservarlos usando Inner Join especificando IsNull o Null, pero no nos compliquemos más, veamos los ejemplos del Outer Join  para esto relacionaremos las tablas 3 y 4 que contiene algunos valores sin equivalente en la otra, primero hagamos un Inner Join comprobando así que no nos dá los valores Null:

--INNER JOIN SELECT * FROM Tabla3 INNER JOIN Tabla4 ON Tabla3.IdLetra = Tabla4.IdLetra

Como verás los valores sin equivalente son omitidos

Page 16: Los inner join- Giovanna Miramontes 3aps Cecyte bc

De tabla izquierda (Left Outer Join)

El Left Outer Join nos permite hacer una mezcla y conservar todos los valores de la tabla izquierda (la primera tabla que se menciona en la consulta) sin importar que no tengan equivalente con la de la derecha, veamos el ejemplo:

--LEFT OUTER JOIN SELECT * FROM Tabla3 LEFT OUTER JOIN Tabla4 ON Tabla3.IdLetra = Tabla4.IdLetra

Page 17: Los inner join- Giovanna Miramontes 3aps Cecyte bc

De tabla derecha

(Left Outer Join) El Right Outer Join nos permite hacer una

mezcla y conservar todos los valores de la tabla derecha (la segunda tabla que se menciona en la consulta) sin importar que no tengan equivalente con la primera, el caso contrario como ven, vamos al ejemplo:

--RIGHT OUTER JOIN SELECT * FROM Tabla3 RIGHT OUTER JOIN Tabla4 ON Tabla3.IdLetra = Tabla4.IdLetra

Page 18: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Combination completa

- (Full Outer Join) Con esta útlima nos permitirá hacer una

mezcla total y conservar todos los valores de ambas tablas, los valores que no tengan equivalencia aparecerán  acompañados de un Null y se mostrán todos ellos, ejemplo:

--FULL OUTER JOIN SELECT * FROM Tabla3 FULL OUTER JOIN Tabla4 ON Tabla3.IdLetra = Tabla4.IdLetra

Page 19: Los inner join- Giovanna Miramontes 3aps Cecyte bc

la idea de los INNER JOINs es poder acceder a campos de una tabla Z relacionada con una tabla X, posiblemente tambien teniendo que pasar por una tercera (o hasta 4ta o...n-esima) tabla relacionada Y.

X---Y----Z

Casi siempre se relacionan por IDs ... asi que digamos que X son compradores, Y son mercaderias y Z son proveedores, como se puede pensar... debo poder conocer el proveedor de un producto que compro un comprador ante una reclamacion (por ejemplo). Por supuesto cada comprador tiene su ID (podria ser su DNI), cada producto su ID_producto y cada proveedor su ID_proveedor.

En general seria algo asi.... Código SQL:

Page 20: Los inner join- Giovanna Miramontes 3aps Cecyte bc

CODIGO

SELECT __(campos)___ FROM ___(tabla1)___

INNER JOIN _(tabla2)____ ON (id_tabla1=id_tabla2) WHERE

condiciones_para_cualquier_campo_de_cualquier_tabla

Page 21: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Para 3 tablas o para 3 tablas (como en el mini-ejemplo)

Código SQL: SELECT __(campos)___ FROM ___(tabla1)___ INNER JOIN _(tabla2)____ ON (id_tabla1=id_tabla2) INNER JOIN _(tabla3)_  ON (id_tabla2=id_tabla3) WHERE

condiciones_para_cualquier_campo_de_cualquier_tabla

Page 22: Los inner join- Giovanna Miramontes 3aps Cecyte bc

donde las condiciones WHERE o cualquier LIMIT va al final y son opcionales.

Asi se puede hacer PERFECTAMENTE pero es mucho mas facil de seguir y evitar confundirse si usamos "alias" para los nombres de las tablas:

Page 23: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Para 4 tablas..

Codigo sql SELECT t1.* FROM TTTT AS t1 INNER JOIN  TTTT AS t2 ON t1.id_ = t2.id_ INNER JOIN TTTT AS t3 ON t2.id_  = t3.id_ INNER JOIN TTTT AS t4 ON t3.id_  = t4.id_

Page 24: Los inner join- Giovanna Miramontes 3aps Cecyte bc

Donde TTTT son los nombres de las distintas tablas.

Page 25: Los inner join- Giovanna Miramontes 3aps Cecyte bc