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.