Genel

JOİN İFADESİ

Bundan önceki tüm sorguların içerisinde yalnızca bir tablo kullanmıştık. Bu sorgular temel SQL işlevleri için birer örnekti. Bu ders ile beraber SQL in esaslı konularına giriş yapıyoruz. Gerçek hayatta ihtiyacımız olan bilgileri bize döndürecek olan sorgular çoğu zaman önceki derslerde anlatılanlar kadar basit olacak.

Veritabanları çoğu zaman birden fazla tablo içerir.Ve bu tablolar birbiri ile ilişkilidir. Örneğin aşağıdaki kitap,ogrenci,yazar,islem tablolarını inceleyelim.

Arkadaşlar isterseniz hemen örneklere geçelim

–Her ögrencinin adı soyadı ve kitabı aldıgı tarihi listeleyiniz. Kitap almayan ögrenciler de listelensin .

select ograd,ogrsoyad,atarih from ogrenci
left join islem on ogrenci.ogrno = islem.ogrno

–kitap okumayan öğrenciler işlem tablosunda değilde
–öğrenci tablosunda olduğu için ilk önce öğrenciyi yazıyoruz ve islem tablosuyla ilişki kuracağımız için daha sonra join ifadesini left kullanarak yazıyoruz

–kitap almayan ögrencilerin bilgilerini listeleyin

select ogrenci.* from ogrenci 
left join islem on ogrenci.ogrno = islem.ogrno
where islemno is null

–Her ögrencinin adı soyadı,kitabın adı ve kitabı aldıgı tarihi listeleyiniz.
— Kitap almayan ögrencileri listele.

select ograd,ogrsoyad,kitapadi,atarih from ogrenci
left join islem on ogrenci.ogrno = islem.ogrno 
left join kitap on islem.kitapno = kitap.kitapno --1.YÖntem

select ograd,ogrsoyad,kitapadi,atarih from kitap
join islem on  islem.kitapno = kitap.kitapno
right join ogrenci on ogrenci.ogrno = islem.ogrno --y2

select ograd,ogrsoyad,kitapadi,atarih from islem
join kitap on  islem.kitapno = kitap.kitapno
right join ogrenci on ogrenci.ogrno = islem.ogrno --y3

–her ögrencinin adı soyadı kitabın adı yazarın adı soyadı kitabın türü ve kitabı aldığı tarihi
–listeleyiniz. kitap almayan ögrencileri listelensin

select ograd,ogrsoyad,kitapadi,atarih,yazarad,yazarsoyad,turadi from ogrenci
left join islem on ogrenci.ogrno = islem.ogrno 
left join kitap on islem.kitapno = kitap.kitapno 
left join yazar on yazar.yazarno=kitap.yazarno
left join tur on tur.turno=kitap.turno

ikinci yol olarak da

select ograd,ogrsoyad,kitapadi,atarih,yazarad,yazarsoyad,turadi from islem
 join kitap on islem.kitapno=kitap.kitapno
right join ogrenci on ogrenci.ogrno = islem.ogrno 
left join tur on kitap.turno=tur.turno
left join yazar on kitap.yazarno=yazar.yazarno

–her ögrencinin adı soyadı ve okuduğu kitap sayısını listeleyiniz. kitap okumayan
–ögrenci için sayı alanında sıfır yazdır…

select ograd,ogrsoyad,count(*) from ogrenci
left join islem on islem.ogrno=ogrenci.ogrno 
group by ograd,ogrsoyad
order by count(*) -- jale kitap okumamasına ragmen 1 kitap okumus sayar. Bu yüzden bunun yerine bu sorguyu yazabiliriz

select ograd,ogrsoyad,count(islemno) from ogrenci
left join islem on islem.ogrno=ogrenci.ogrno 
group by ograd,ogrsoyad
order by count(*)-- jale hiç kitap okumamıştır.-1

–10a veya 10b sınıfındaki ögrencilerin adı soyadı okuduğu kitap sayısı

elect ograd,ogrsoyad, count(islemno) from ogrenci
left join islem on islem.ogrno= ogrenci.ogrno
where sinif='10A' or sinif='10B'
group by ograd,ogrsoyad,sinif,ogrenci.ogrno
order by count(*)

 

Yorum

Yorum Yap