Consultas de varias tablas – Usando Join

Select desde varias tablas – Uso de Joins

Para escribir consultas cuyos datos que se desea mostrar se encuentran en varias tablas es necesario que estas estén CORRECTAMENTE relacionadas, antes de hacer las consultas desde varias tablas se deben evitar y corregir los valores Null en la base de datos. Es convenientes que las relaciones entre tablas cumplan con la integridad de datos.

Para optimizar las consultas desde varias tablas se recomienda usar  Join de la manera como se muestran en los ejercicios. Siempre hay una tabla desde donde se va a listar los registros y otras desde donde se van a extraer valores para completar el listado con datos que la hacen mas detallada.

Para usar un Join existen varias formas, en este artículo se explica el uso del join de la manera más simple, la cláusula Join se escribe después de la cláusula From, es conveniente definir de manera correcta las dos tablas que se relacionan, existe un campo común entre las dos tablas, en la tabla principal es la PK y en la tabla con la que se relacionará es la FK.

Se recomienda usar alias adecuados para las tablas y los campos en el listado desde varias tablas. (Ver Uso de Alias en consultas)

Ejercicios

Usando Norhtwind
use Northwind
go

1. — Listado de las órdenes y el nombre del cliente

select O.OrderID As ‘Orden’, O.Freight as ‘Monto’,
C.CompanyName As ‘Cliente’
from Orders As O
join Customers As C on O.CustomerID = C.CustomerID
go

2. — Listado de las órdenes y el nombre del empleado que las generó

select O.OrderID As ‘Orden’, O.Freight as ‘Monto’,
Empleado = E.LastName + SPACE(1) + E.FirstName
from Orders As O
join Employees As E on O.EmployeeID = E.EmployeeID
go

3. — Listado de las órdenes y los nombres del cliente y del empleado que las generó

select O.OrderID As ‘Orden’, O.Freight as ‘Monto’,
C.CompanyName As ‘Cliente’,
Empleado = E.LastName + SPACE(1) + E.FirstName
from Orders As O
join Customers As C on O.CustomerID = C.CustomerID
join Employees As E on O.EmployeeID = E.EmployeeID
go
— Note los joins después de la cláusula From

4. — Producto y su categoria

select P.ProductID As ‘Código’, P.ProductName,
P.UnitPrice As ‘Precio’, C.CategoryName
from Products As P
join Categories As C on P.CategoryID = C.CategoryID
go

5. — El detalle de la orden 10275, incluyendo el nombre del producto.

select Od.OrderID As ‘Nº Orden’, Od.ProductID As ‘Cód. Producto’,
P.ProductName As ‘Descripción’, Od.UnitPrice As ‘Precio’,
Od.Quantity As ‘Cantidad’
from [Order Details] As OD
join Products As P on od.ProductID = P.ProductID
where OrderID = ‘10275’
go

6. — Listado de productos y el proveedor

select P.ProductID As ‘Código’, P.ProductName,
P.UnitPrice As ‘Precio’, S.CompanyName As ‘Courier’,
S.Address As ‘Dirección Courier’
from Products As P
join Suppliers As S on P.SupplierID= S.SupplierID
go

7. — Listado de órdenes y las compañías de envío

select O.OrderID As ‘Orden’, O.Freight as ‘Monto’,
S.CompanyName As ‘Courier’
from Orders As O
join Shippers As S on O.ShipVia = S.ShipperID
go

8. — Incluir en la orden anterior el nombre del empleado que  generó la orden y el cliente.

select O.OrderID As ‘Orden’, O.Freight as ‘Monto’,
C.CompanyName As ‘Cliente’,
Empleado = E.LastName + SPACE(1) + E.FirstName,
S.CompanyName As ‘Courier’
from Orders As O
join Shippers As S on O.ShipVia = S.ShipperID
join Customers As C on O.CustomerID = C.CustomerID
join Employees As E on O.EmployeeID = E.EmployeeID
go

Recomendaciones:

  • Al usar Join, antes de realizar listados, deben eliminarse los valores Null de la base de datos.
  • En el diseño de su base de datos debe estar correctamente definidas las claves primarias de las tablas y las claves foráneas de las mismas para que los datos ingresados tengan consistencias e integridad.
  • Al utilizar Join, después de la palabra ON la primera tabla de la igualdad es la principal, la que se encuentra después de la cláusula From, en la parte derecha de la igualdad va la tabla referenciada después de la palabra join.