Merhaba arkadaşlar,
Bu yazıda join ifadelerini anlatacağım.Join iki ya da daha fazla tabloyu birleştirerek denormalize edilmiş şekilde gösterme işlemini gerçekleştirir. Join ifadelerini en güzel şu resim anlatmaktadır.

Aşağıdaki sorgu Kategoriler ile Ürünler tablosundaki verilerin kesişimlerinin çıktısını verir.
select *
from Categories as c
inner join Products as p
on p.CategoryID = c.CategoryID

Satışlarla ilgili bir rapor çıkrınız. ürünün adı,şu anki fiyatı satıştaki fiyatı,şu anki stoğu kaç adet satıldığı
select
p.ProductName,
p.UnitPrice,
p.UnitsInStock,
od.Quantity,
od.UnitPrice
from [Order Details] as od
inner join Products as p
on od.ProductID = p.ProductID

Ürünlerin tedarikçi firma adı,iletisim adı,adres,telefon ve fax bilgileri ile listeleyiniz.
select
p.ProductName,
s.CompanyName,
s.ContactName,
s.Address,
s.Phone,
s.Fax
from Products as p
inner join Suppliers as s
on p.SupplierID = s.SupplierID

Hangi kategoride hangi üründen kaç adet satılmıştır?
select
p.ProductName,
c.CategoryName,
SUM(od.Quantity)
from Categories as c
inner join Products as p
on p.CategoryID=c.CategoryID
inner join [Order Details] as od
on od.ProductID = p.ProductID
group by p.ProductName,c.CategoryName
order by SUM(od.Quantity) desc

Müşterilerin hangi kategoride kaç dolarlık alışveriş yaptığını raporlayınız.
select
ca.CategoryName,
cu.CompanyName,
SUM(od.Quantity*od.UnitPrice)
from Categories as ca
inner join Products as p
on ca.CategoryID = p.CategoryID
inner join [Order Details] as od
on od.ProductID=p.ProductID
inner join Orders as o
on o.OrderID = od.OrderID
inner join Customers as cu
on cu.CustomerID = o.CustomerID
group by ca.CategoryName,cu.CompanyName

Outer join -> Sorgu tablolarından birindeki tüm verilerin gelmesi ve diğerindeki eşleşen verilerin gelmesini sağlamak için kullanılır.inner join sadece eşleşen kayıtları getirir,outer join bu eksikliği gidermek içindir.
Right->sonra yazılan tablonun yani bağlanan tablonun tüm kayıtlarının eşleşmese bile gelmesini sağlar
Left-> önce yazılan tablonun tüm kayıtlarının eşleşmese bile gelmesini sağlar
Full-> önceki ve sonraki iki tablonun da tüm kayıtlarının gelmesini sağlar
Outer Join’lerde outer kelimesi yazılmadan da kullanılabilir.Eğer sadece Join yazılırsa bu inner join olarak kabul edilir.
select *
from Categories as c
left outer join Products as p
on p.CategoryID=c.CategoryID
order by c.CategoryName
select *
from Categories as c
right outer join Products as p
on c.CategoryID = p.CategoryID
select *
from Categories as c
full outer join Products as p
on p.CategoryID = c.CategoryID
Müşterilerin alışveriş yaptığı tarihleri listeleyin hiç alışveriş yapmamışsa dahi müşteri gözüksün.
select
c.CompanyName,
o.OrderDate
from Customers as c
left outer join Orders as o
on c.CustomerID = o.CustomerID
order by o.OrderDate

İşte bu kadar =) Join ifadeleri ilk kullanımlarda mantığınıza oturmayabilir. O yüzden resimdeki kümeleri incelemenizde fayda vardır.
Bir sonraki yazımda görüşmek üzere kendinize iyi bakınız.