Inner Join, Outer Join, Cross Join

Serie de vídeos con los conceptos e instrucciones básicas para escribir consultas en SQL Server.  Tercer vídeo donde se muestra el uso de la instrucción JOIN para conectar tablas, se explica los tipos de Join internos y externos, también el cross join, así como las instrucciones intersect y except.

Mediante el uso de joins, puede recuperar datos de dos o más tablas según las relaciones lógicas entre las tablas. Los join indican cómo SQL Server debería usar los datos de una tabla para seleccionar las filas en otra tabla.

Una condición de unión define la forma en que dos tablas están relacionadas, normalmente una condición de join típica especifica una clave foránea de una tabla y su clave asociada en la otra tabla.


Existen joins de tipo interno y joins de tipo externo, los joins de tipo interno se pueden especificar en las cláusulas FROM o WHERE.
Los join de tipo externo solo se pueden especificar en la cláusula FROM. Las condiciones del join se combinan con las condiciones de búsqueda WHERE y HAVING para controlar las filas que se seleccionan de las tablas base a las que se hace referencia en la cláusula FROM.

Realicemos unos ejemplos usando la base de datos Northwind (que puede ser descargada del siguiente link)

Use Northwind
go

—Union entre tablas usando el estandar ISO-ANSI-92
SELECT C.CustomerID, C.CompanyName, C.ContactName
, C.Country, O.OrderID, O.OrderDate
FROM Customers as C INNER JOIN Orders as O
on C.CustomerID=O.CustomerID
go

–Union entre tablas usando el estandar ISO-ANSI89
SELECT C.CustomerID, C.CompanyName, C.ContactName
, C.Country, O.OrderID, O.OrderDate
FROM Customers as C, Orders as O
Where C.CustomerID=O.CustomerID and C.Country=’USA’
go
—Ejemplo consultando mas de dos tablas
SELECT C.CustomerID, C.CompanyName, C.ContactName
, C.Country, O.OrderID, O.OrderDate, P.ProductName
, D.UnitPrice, D.Quantity
FROM Customers as C INNER JOIN Orders as O
on C.CustomerID=O.CustomerID
INNER JOIN [Order Details] as D
on O.OrderID=D.OrderID
INNER JOIN Products as P
on D.ProductID=P.ProductID
go

—Unir la tabla Suppliers con Products y luego con categorías

SELECT P.ProductName, S.CompanyName, C.CategoryName
FROM Products as P join Suppliers as S
on P.SupplierID=S.SupplierID
INNER JOIN Categories as C
on P.CategoryID=C.CategoryID
go

—Ejemplo de los Join externos
—LEFT OUTER JOIN
SELECT C.CustomerID, C.CompanyName, C.ContactName
, C.Country, O.OrderID, O.OrderDate
FROM Clientes as C LEFT OUTER JOIN Ordenes as O
on C.CustomerID=O.CustomerID
where O.OrderID is null
go

—Right Outer join
SELECT C.CustomerID, C.CompanyName, C.ContactName
, C.Country, O.OrderID, O.OrderDate
FROM Clientes as C Right Outer join Ordenes as O
on C.CustomerID=O.CustomerID
Where C.CustomerID is null
go

—Full outer join
SELECT C.CustomerID, C.CompanyName, C.ContactName
, C.Country, O.OrderID, O.OrderDate
FROM Clientes as C Full Outer join Ordenes as O
on C.CustomerID=O.CustomerID
go

—Cross Outer join

—Forma uno de hacer un cross join
SELECT C.CustomerID, C.CompanyName, C.ContactName
, C.Country, O.OrderID, O.OrderDate
FROM Clientes as C Cross join Ordenes as O
go

—Forma dos de hacer un cross join
SELECT C.CustomerID, C.CompanyName, C.ContactName
, C.Country, O.OrderID, O.OrderDate
FROM Clientes as C, Ordenes as O
go

—Ejemplo de una realación de la tabla con ella misma

SELECT J.FirstName +’ ‘ + J.LastName as Jefe
, S.FirstName+ ‘ ‘+ S.LastName as Subalterno
FROM Employees as J INNER JOIN Employees as S
on J.EmployeeID=S.ReportsTo
go

SELECT distinct J.FirstName +’ ‘ + J.LastName as Jefe
FROM Employees as J LEFT OUTER JOIN Employees as S
on J.EmployeeID=S.ReportsTo
Where S.FirstName is not null
go

Leave a Reply

Your email address will not be published. Required fields are marked *