Join

Northwind

--------------JOIN-----------------
--  Inner Join
--  Sadece eşleşen verileri getirir

use master
go

create  database JoinDB
go

use JoinDB
go

create table Kategoriler
(
   KategoriID int primary key identity(1,1),
   KategoriAdi varchar(20)
)
go

create table Urunler
(
   UrunID int primary key identity(1,1),
   UrunAdi varchar(50),
   -- references ile foreign key oluşturuldu
   KategoriID int references Kategoriler(KategoriID),
   BirimFiyat decimal(6,2)
)

-- kategori ekleyelim
insert into Kategoriler
values('Gıda')

insert into Kategoriler(KategoriAdi)
values('Temizlik')

insert into Kategoriler
values('Kozmetik')

-- kategorileri listeleyelim
select * from Kategoriler

-- tüm identity ve veri bilgilrini siler sıfır tablo oluşturur
truncate table Kategoriler

insert into Urunler
values('Tahıl',1,12.3)

insert into Urunler
(UrunAdi,KategoriID,BirimFiyat)
values('Ace',2,6.7)

insert into Urunler
(UrunAdi,BirimFiyat)
values('Parfüm',107.89)

select * from Urunler
select * from Kategoriler

-- tüm kategorileri ve ürünlerini listeleyin...
-- on dan sonra yazılan eşlemenin sağda solda olmasının  hiçbir yerde önemi yok.
-- Sadece inner join de tablo sırasının önemi yok. Outer join de tablo sırası önemli olacak
select u.UrunAdi,k.KategoriAdi
from Urunler as u
inner join Kategoriler k
on u.KategoriID=k.KategoriID

-- Northwind den hangi ürünü hangi tedarikçi getiriyor listeleyin
-- ddl lerde go kullanıyoruz.
-- dml lerde gerek yok
use Northwind
go

select s.CompanyName,p.ProductName
from Suppliers s
join Products p
on p.SupplierID=s.SupplierID

-- hangi şirket hangi tarihte sipariş vermiş
-- Customers(Müşteriler)
-- Orders (Siparişler)
-- CustomerID
select c.CompanyName,o.OrderDate
from Orders o
join Customers c on o.CustomerID=c.CustomerID

-- hangi kategorideki hangi urunu hangi tedarikci getiriyormuş???
-- categories, products, suppliers
-- tablo join tablo on bilmem ne join tablo on bilmem ne
select p.ProductName 'Ürün Adı',
s.CompanyName 'Tedarikçi',
c.CategoryName 'Kategori'
from Products p
join Categories c on c.CategoryID=p.CategoryID
join Suppliers s on s.SupplierID=p.SupplierID

-- hangi çalışanım hangi müşteriden hangi tarihte hangi üründen kac tane sipariş almış?
select p.ProductName,
o.OrderDate,
c.CompanyName,
e.FirstName+' '+e.LastName as eleman,
od.Quantity
from Orders o
join Employees e on e.EmployeeID=o.EmployeeID
join Customers c on c.CustomerID=o.CustomerID
join [Order Details] od on od.OrderID=o.OrderID
join Products p on p.ProductID=od.ProductID

-- her çalışanın adını soyadını tek kolon olarak, bu çalışanın yaşını ve aldığı toplam sipariş sayısını listeleyiniz...
-- Employees, Orders
select e.FirstName+' '+e.LastName,
COUNT(o.OrderID) as 'Sipariş Sayısı',
DATEDIFF(YYYY,BirthDate,GETDATE()) as Yas
from Employees e
join Orders o on o.EmployeeID=e.EmployeeID
group by e.FirstName+' '+e.LastName,DATEDIFF(YYYY,BirthDate,GETDATE())

-- her kategorinin adını o kategorideki en fazla para kazandıran ürünün adını ve kazandırdığı miktarı listeleyin
/*
    Gıda : ekmek 4  ve turşu  8
    temizlik : ace 67  rinso  5

    cıktı;

    Gıda      turşu 8
    temizlik  ace   67
*/
select * from
(
   select c.CategoryName,p.ProductName,
   SUM(od.UnitPrice*od.Quantity) as Toplam
   from Categories c
   join Products p on p.CategoryID=c.CategoryID
   join [Order Details] od on p.ProductID=od.ProductID
   group by c.CategoryName,p.ProductName
) as t
where Toplam=
(
   select MAX(Toplam) from
   (
      select c.CategoryName,p.ProductName,
      SUM(od.UnitPrice*od.Quantity) as Toplam
      from Categories c
      join Products p on p.CategoryID=c.CategoryID
      join [Order Details] od on p.ProductID=od.          ProductID
      group by c.CategoryName,p.ProductName
   ) as tt
   where tt.CategoryName=t.CategoryName
)

--hangi kategorideki(CategotyName) hangi üründen(ProductName) hangi tarihte(OrderDate) hangi müşteriye(CompanyName) hangi çalışan(FirstName,LastName) tarafından kaç tane(Quantity) satılmıştır?
select c.CategoryName,
p.ProductName,
o.OrderDate,
od.Quantity,e.FirstName+' '+e.LastName,
cu.CompanyName
from
Categories c
join Products p on p.CategoryID=c.CategoryID
join [Order Details] od on od.ProductID=p.ProductID
join Orders o on o.OrderID=od.OrderID
join Employees e on e.EmployeeID=o.EmployeeID
join Customers cu on  cu.CustomerID=o.CustomerID