Sql Joins
Enviado por geminus_911pepe • 5 de Junio de 2014 • 3.097 Palabras (13 Páginas) • 221 Visitas
Tipos de Join en T-SQL y como usarlos…
17 10 2009
Hola, después de un tiempo sin postear – lo siento cuestiones de tiempo – regreso con otra ayudita en lo que es Transact, bueno aunque esto no es propio del Transact sino del SQL en si, vamos a ver como son los tipos de Joins que por cierto son muy útiles hasta imprescindibles diría yo para implementar nuestras consultas, ya entramos al campo de las consultas multitabla y voy a plantear un par de estas (que aunque sin lógica) son de ejemplo para que puedan entender lo mejor posible como funcionan los tipos de Join.
Empezando les comentaré que en SQL 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, quiero explicarlos con ejemplos y lo más sencillo posible, no me detendré mucho en la sintaxis sino en como funcionan y como los podrías usar, porque yo sé que llegaste desesperadamente a mi blog por mera casualidad pero buscando una ayudita y no que te enreden más la vida xD
Tipos de Join:
1. Internos (Inner Join)
• De Equivalencia (Equi – Join)
• Natural (Natural – Join)
• Cruzado (Cross – Join)
• En sí mismo (Self – Join)
2. Externos (Outer Join)
• De tabla Izquierda (Left Outer Join)
• De tabla Derecha (Right Outer Join)
• Combinación completa (Full Outer Join)
Bueno empezaremos creando unas tablas son simples y quiero que sigas la lógica usaré letras para que al hacer las mezclas no te confundas y números para que sean fáciles de ubicar y entiendas que realiza cada consulta eso es lo más importante después tu podrás subirles el nivel de complejidad.
Creamos las tablas en nuestra Query de SQL Management Studio en una Base de datos que hayas creado.
- Tabla1 (IdLetra, Valor1)
- Tabla2 (IdLetra, Valor2)
- Tabla3 (IdLetra, Valor3)
- Tabla4 (IdLetra, Valor4)
CREATE TABLE Tabla1 (IdLetra varchar(5), Valor1 int)
CREATE TABLE Tabla2 (IdLetra varchar(5), Valor2 int)
CREATE TABLE Tabla3 (IdLetra varchar(5), Valor3 int)
CREATE TABLE Tabla4 (IdLetra varchar(5), Valor4 int)
Y le agregamos algunos valores para los ejemplos:
INSERT INTO TABLA1 VALUES ('A',1)
INSERT INTO TABLA1 VALUES ('B',2)
INSERT INTO TABLA1 VALUES ('C',3)
INSERT INTO TABLA1 VALUES ('D',4)
INSERT INTO TABLA1 VALUES ('E',5)
INSERT INTO TABLA1 VALUES ('F',6)
INSERT INTO TABLA2 VALUES ('A',10)
INSERT INTO TABLA2 VALUES ('B',20)
INSERT INTO TABLA2 VALUES ('C',30)
INSERT INTO TABLA2 VALUES ('D',40)
INSERT INTO TABLA2 VALUES ('E',50)
INSERT INTO TABLA2 VALUES ('F',60)
INSERT INTO TABLA3 VALUES ('A',7)
INSERT INTO TABLA3 VALUES ('B',8)
INSERT INTO TABLA3 VALUES ('C',9)
INSERT INTO TABLA3 VALUES ('D',10)
INSERT INTO TABLA3 VALUES ('E',11)
INSERT INTO TABLA3 VALUES ('F',100)
INSERT INTO TABLA3 VALUES ('G',200)
INSERT INTO TABLA4 VALUES ('A',12)
INSERT INTO TABLA4 VALUES ('B',13)
INSERT INTO TABLA4 VALUES ('C',14)
INSERT INTO TABLA4 VALUES ('D',15)
INSERT INTO TABLA4 VALUES ('E',16)
INSERT INTO TABLA4 VALUES ('H',300)
INSERT INTO TABLA4 VALUES ('I',400)
Te recomiendo hacerles un SELECT a las tablas para que las examines y comprendas mejor los ejemplos, además que en cada ejemplo hagas SELECT al mismo tiempo a las tablas involucradas y puedas comparar el select de tus tablas con el resultado de las consultas de Join .
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)
Se ve medio complicado asi, pero créeme que no lo es, conserva este “molde” por decirlo así que te puede ayudar en tus dudas sobretodo si eres nuevo en esto, bueno ahora si vamos a hacerlo en Transact y vamos a relacionar las tablas 1 y 2 para que puedas ver como queda. Este ejemplo será el mismo lo haré primero con alias y luego sin alias:
Inner Join Tabla 1 y Tabla2 (con alias)
--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
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:
--Ejemplo
SELECT T1.Valor1,T2.Valor2,T2.IdLetra FROM Tabla1 T1 INNER JOIN Tabla2 T2 ON T1.IdLetra =T2.IdLetra
- De Equivalencia (Equi-Join)
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.IdLetra
- Natural (Natural-Join)
Propiamente en T-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
...