Los inner join- Giovanna Miramontes 3aps Cecyte bc
1.
2. Es otro tipo de composicion de tablas
que permite emparejar filas de
distintas tablas de foma mas
eficiente
3.
4. 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
5. 1. Internos (Inner Join)
De Equivalencia (Equi – Join)
Natural (Natural – Join)
Cruzado (Cross – Join)
En sí mismo (Self – Join)
6. 2. Externos (Outer Join)
De tabla Izquierda (Left Outer Join)
De tabla Derecha (Right Outer Join)
Combinación completa (Full Outer Join)
7. 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)
8. -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
9. 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:
11. 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
12. 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
13. - 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
14. - 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
15. 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
16. 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
17. (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
18. - (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
19. 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:
20. SELECT __(campos)___ FROM
___(tabla1)___
INNER JOIN _(tabla2)____
ON (id_tabla1=id_tabla2)
WHERE
condiciones_para_cualquier_campo_de
_cualquier_tabla
21. 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_cu
alquier_tabla
22. 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:
23. 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_
24. Donde TTTT son los nombres de las
distintas tablas.