--JOINLER:İKİ TABLOYU İLİŞKİLİ KOLONLAR ÜZERİNDEN BİRBİRİNE BAĞLARLAR
--TABLOLARIN DENORMALIZE ŞEKİLDE SORGULANMALARINI SAĞLARLAR
--3 ÇEŞİT JOIN.INNER JOIN,OUTER JOIN,CROSS JOIN.
--INNER JOIN:İLİŞKİLİ KOLONLARDA NULL OLMAYAN DEGERLERİ İLİŞTİREREK
--LİSTELEME YAPARLAR.
--Ürün adı Categori isimleri ile birlikte gelsin.Aynı zamanda ürün fiyatı ve stok
--miktarıda olsun(products and categories)
--select*from Products
--select*from Categories
select ProductName,CategoryName /*(c.CategoryName)*/, UnitPrice,UnitsInStock
from Products p inner join Categories c on p.CategoryID=c.CategoryID
--ürünleri tedarikçi şirketlerin adları ile listeleyiniz.(products and suppliers
select ProductName,UnitPrice,CompanyName /*(s.CompanyName)*/ from Products
p inner join Suppliers s on s.SupplierID=p.SupplierID --supplierid ile suppliers
--ve products tabloları birleştiriliyor
--ürünler ve tedarikçiler tablolarını birleştiriniz.
select*from Products p inner join Suppliers s on s.SupplierID=p.SupplierID
--Ürünlerin satış raporunu ürün adı satış fiyatı adet indirim kolonları
--(order details and products)
select ProductName,o.UnitPrice,UnitsInStock,Discount from Products p inner join
[Order Details] o on p.ProductID=o.ProductID --unitpriceler her iki
--tabloda da ayrı ayrı
--Hangi satışta hangi ürünler satılmıştır.(orders and orders details and products)
select p.ProductName,od.UnitPrice,od.Quantity,od.Discount,o.OrderDate,o.ShippedDate
from Products p inner join [Order Details] od on p.ProductID=od.ProductID
inner join Orders o on o.OrderID=od.OrderID
--Hangi personel hangi müşteriye hangi tarikte satış yapmıştır.(employees and
--orders and customers)
select e.FirstName+' '+e.LastName 'İSİM SOYİSİM', c.ContactName,o.OrderDate
from Employees e inner join Orders o on e.EmployeeID=o.EmployeeID inner join
Customers c on c.CustomerID=o.CustomerID
--Hangi müşteri hangi üründen kaç dolarlık satış almıştır.(4 tablo)
--(products,order details,orders,customers)
select c.ContactName,ProductName,od.UnitPrice*od.Quantity*(1-od.Discount)
as 'TOPLAM FİYAT' from Products p inner join [Order Details] od on
p.ProductID=od.ProductID inner join Orders o on o.OrderID=od.OrderID inner join
Customers c on c.CustomerID=o.CustomerID
--Hangi personel hangi kategoriden hangi ürünleri satmıştır..
select e.FirstName+' '+e.LastName 'PERSONEL ADI',c.CategoryName,
p.ProductName from Categories c inner join Products p on
c.CategoryID=p.CategoryID inner join [Order Details] od on
od.ProductID=p.ProductID inner join Orders o on o.OrderID=od.OrderID inner join
Employees e on e.EmployeeID=o.EmployeeID
--Urunlerimizin adlarını ve kategorileri adlarını bir raporda gosteriniz..
Select ProductName,CategoryName from Products inner join Categories on Categories.CategoryID=Products.CategoryID
where CategoryName='Beverages' and UnitsInStock>0
--Federal Shiping ile tasinmis ve Nancy'nin almis olduğu siparisleri gosteriniz
--(OrderID,FirstName,LastName,OrderDate,CompanyName)
Select FirstName,LastName,OrderDate,CompanyName,OrderID from Orders o
inner join EMployees e on o.EmployeeID=e.EmployeeID inner join
Shippers s on o.ShipVia=s.ShipperID where CompanyName='Federal Shipping' and FirstName='Nancy'
--**Tablolarınıza sorgular icersinde alias verme sansına sahipsiniz.Bu sayede çok daha kısa
--kısa sorgular yazabilirsiniz...
--CompanyName'leri arasinda a gecen musterilerin vermis oldugu,Nancy;Andrew ya da Janet
--tarafından alinmis,Speedy Express ile tasinmamis siparislere toplam ne kadarlık kargo odemesi yapılmıştır?
Select SUM(o.Freight) from Orders o
inner join Customers c on o.CustomerID=c.CustomerID
inner join Employees e on e.EmployeeID=o.EmployeeID
inner join Shippers s on s.ShipperID=o.ShipVia
where c.CompanyName like '%A%' and e.FirstName in
('Nancy','Andrew','Janet') and s.CompanyName !='Speedy Express'
--En cok urun aldıgımız 3 toptancıyı, almıs oldugumuz urun miktarlarına gore
--raporlayınız...
Select top 3 CompanyName,COUNT(ProductID) as 'Alinan Siparis Sayisi' from
Products inner join Suppliers on Suppliers.SupplierID=Products.SupplierID
group by CompanyName order by [Alinan Siparis Sayisi] desc
--Her bir urunden toplam ne kadarlık satis yapılmıstir ve o urunler hangi kategoriye aittir?
Select ProductName,CategoryName,SUM(od.UnitPrice*od.Quantity) as 'Gelir' from
[Order Details] od inner join Products p on p.ProductID=od.ProductID
inner join Categories c on c.CategoryID=p.CategoryID group by ProductName,CategoryName order by
gelir desc
--INNER JOIN null satırları getirmez.mesela e ticaret sitesinde ürün resimleri bağladınız.
--inner join ile birleştirdiniz tabloları.resmi olmayan ürünler gelmez bu şekilde.u durumda
--OUTER JOIN kullanılır.null olmasına aldırış etmez ve verileri getirir.
--OUTER JOIN 3 çeşittir.LEFT,RIGHT,FULL
--LEFT JOIN:sorguda önce yazılan tablo left tir ve left olan tablodaki tüm
--kayıtlar (null dahil) getirilip RIGHT yani yeni bağlanan tablodaki sadece ilişkili
--kayıtların (null dahil değil) getirilmesine LEFT JOIN denir.
select*from Products p left outer join Categories c on c.CategoryID=p.CategoryID
--product ve categories tablolarına karpuz kavun gibi ürünler ekleyip null kayıtlar ekleyelim
--sonuç daha net görülür
--Left Outer Join=> Sorgunuzda sol taraftan alınan tum verilerin gelmesini,sag tarafta o verilere karsilik veriler
--olmasa bile null degerlerin görünmesini sağlayan join tipidir.
--From'dan sonraki tablo sol tablo;
--Join'den sonraki tablo sag tablo;
--olarak adlandırılır...
--Urunleri ve baglı bulundukları kategorileri listeleyiniz.
--Ancak urunu olmayan kategoriler de sorgu sonucuna dahil edilsin
Select ProductName,CategoryName from Categories
right join Products on Categories.CategoryID=Products.CategoryID
--Full Outer Join=> Sorgumuzda sag ve sol taraftan alinantum verilerin gelmesini sağlar.
--Eger sol ya da sag tarafdaki veriler olmasa bile null degerlerin gorunmesini sağlayan join tipidir.
--Urunleri ve baglı bulundukları kategorileri listeleyiniz.
--Ancak kategorisi olmayan urunler ve urunleri olmayan kategoriler de sorgu sonucuna dahil edilsin...
Select ProductName,CategoryName from Categories full join Products on Products.CategoryID=Categories.CategoryID
--RIGHT JOIN: yeni bağlanan join yapılan tablodaki ilişkili olmayan kayıtlarında listelenmesi için kullanılan join dir.
--sol tablodaki ilişkili olmayan kayıtlar önemsenmez.
select*from Products p right outer join Categories c on c.CategoryID=p.CategoryID
--FULL JOİN:her iki tablodaki tüm kayıtlar getirlir.ilişkili olan kayıtlar ilişkilendirilir.
--ilişkisiz kayıtlar ayrıca sonda veya başta listelenir.
select*from Products p full outer join Categories c on c.CategoryID=p.CategoryID
--Hangi ürünün hangi nakliye firması ile taşınmıştır.(yaşınması bile satış görünmelidir)
select p.ProductName,s.CompanyName from Products p inner join [Order Details]
od on od.ProductID=p.ProductID inner join Orders o on o.OrderID=od.OrderID
left outer join Shippers s on s.ShipperID=o.ShipVia
--ürün satılmış ancak nakliyecisi belli değilse gözüksün ama nakliyecide null yazsın
--Hangi tedarikçiden toplam kaç tl lik ürün satılmıştır(group by)
--(suppliers,order products and details)
select s.CompanyName,SUM(od.UnitPrice*od.Quantity)
as 'Toplam Satış' from
Suppliers s
inner join Products p on s.SupplierID=p.SupplierID
inner join [Order Details]
od on od.ProductID=p.ProductID group by s.CompanyName
--kategorilerin toplam satış rapoarları (categories and product and order details)
select c.Categoryname,Sum(od.Quantity*od.UnitPrice*(1-Discount)) as [TOPLAM SATIŞ]
from Categories c left join Products p on p.CategoryID=c.CategoryID left join
[Order Details] od on od.ProductID=p.ProductID
group by c.CategoryName order by 1
--Nakliyecilerin toplam taşıdıkları ürünlerin değerlerini bulalım (shippers and orders and order details)
select s.CompanyName,SUM(od.UnitPrice*od.Quantity*(1-od.discount)) from Shippers s left join
Orders o on s.ShipperID=o.ShipVia left join [Order Details] od on od.OrderID=o.OrderID
group by s.CompanyName
--Hangi personel hangi ürünü toplam kaç dolarlık satmıştır
select e.FirstName+' '+e.LastName,p.ProductName,SUM(od.UnitPrice*od.Quantity*(1-od.Discount)) from
Products p left join [Order Details] od on p.ProductID=od.ProductID left join Orders o on
o.OrderID=od.OrderID left join Employees e on e.EmployeeID=o.EmployeeID group by
e.FirstName+' '+e.LastName,p.ProductName