2018/02/01

CROSS JOIN

--CROSS JOIN...:Tablodaki tüm kayıtları birbiri ile 
--kartezyen çarpım yaparak birbiri ile ilişkilendirir
---------------------------------------------------

--soru...:Hangi personel hangi ürünlerden satış yapmamıştır.
select p.Adi,u.UrunAdi from Personeller  p cross join 
Urunler u --buraya kadar yaptıgımız kartezyen çarpımdır.
except--hangi personel hangi üründen satış yapmıştır.
select p.Adi, u.UrunAdi from Personeller  p 
left join Satislar s on s.PersonelID=p.PersonelID
left join SatisDetay sd on sd.SatisID=s.SatisID
left join Urunler u on u.UrunID=sd.UrunID
group  by p.Adi , u.UrunAdi

---------------------------------------------------
--soru...: Hangi tedarikçiden hangi ürün hiç tedarik edilmemiştir. select t.SirketAdi,u.UrunAdi from Urunler u cross join Tedarikciler t except--aşagıda hangi tedarikçi hangi ürünü tedarik etmiştirin cevabı select t.SirketAdi,u.UrunAdi from Tedarikciler t left join Urunler u on t.TedarikciID=u.TedarikciID group by t.SirketAdi,u.UrunAdi
---------------------------------------------------
--Hangi ürün hangi müşteriye hiç satılmamıştır. select u.UrunAdi,m.MusteriAdi from Urunler u cross join Musteriler m except --Hangi ürün hangi müsteriye satılmıştır. select u.UrunAdi,m.MusteriAdi from Urunler u left join SatisDetay sd on u.UrunID=sd.UrunID left join Satislar s on s.SatisID=sd.SatisID left join Musteriler m on m.MusteriID=s.MusteriID group by u.UrunAdi,m.MusteriAdi

SQL OUTER JOIN

--OUTER JOIN
--outer join(dış birleşim)...:İlişkili tablolardaki null 
--kayıtlar dahil bütün kayıtalrı getirir.
--3 Çeşit outer join(dış birleşim) vardır.

--1. si left outer join(sol dış birleşim)..:left join de soldaki 
--null dahil bütün kayıtlar getirilir.Diger tablonun ise sadece ilişkili 
--kısımlarını getirir. 
select * from Satislar left  join Musteriler on
Satislar.MusteriID=Musteriler.MusteriID

--2.si right outer join(sağ dış birleşim)...:right joinde
--sağdaki tablonun null dahil
--bütün degerlerini getirir. Diger tablonun ise sadece ilişkili verileri gelir.
select * from Satislar right  join SatisDetay on
Satislar.SatisID=SatisDetay.SatisID

--3.sü ise full outer join...: Her iki tabloda null
--kayıtlar dahil bütün kayıtları getirir.
select * from Urunler full outer join Kategoriler on
Urunler.KategoriID=Kategoriler.KategoriID


--soru..:Kesişim kümesi hariç diger alanları listele
select * from Urunler full outer join Kategoriler  on
Kategoriler.KategoriID=Urunler.KategoriID
where Kategoriler.KategoriID IS NULL OR Urunler.KategoriID  IS NULL

--Hangi tedarikçiden toplamda  kaç dolarlık  ürün tedarik edilmiştir.
--(tüm tedarikçiler gelmelidir.)
select Tedarikciler.TedarikciID,sum(Urunler.Fiyat)
from Tedarikciler left join Urunler on-
Urunler.TedarikciID=Tedarikciler.TedarikciID
group by Tedarikciler.TedarikciID 


--Hiç satış yapılmayan müşterilerimizi listeleyen sorguyu yazınız.

select * from Musteriler left join Satislar on
Musteriler.MusteriID=Satislar.MusteriID where Satislar.SatisID Is null

--nakliye edilmeyen siparişleri listeleyiniz.
select * from Satislar left join Nakliyeciler on 
Nakliyeciler.NakliyeciID=Satislar.ShipVia
where Satislar.ShipVia IS NULL

select * from Nakliyeciler
select * from Satislar

--Hiç nakliye yapmayan nakliyecileri listeleyen sorguyu yazınız.
select * from Nakliyeciler left join Satislar on
Nakliyeciler.NakliyeciID=Satislar.ShipVia
where Satislar.ShipVia IS NULL

--Hangi personel hangi üründen hiç satış yapmamıştır.

select Urunler.UrunAdi,Personeller.adi from Personeller left  join Satislar on 
Personeller.PersonelID=Satislar.PersonelID
left join SatisDetay on 
Satislar.SatisID=SatisDetay.SatisID
left join Urunler on
Urunler.UrunID=SatisDetay.UrunID
group by Urunler.UrunAdi,Personeller.adi