Aslında HAVING ifadesinin işlevi WHERE ifadesinin kine çok benziyor. Ancak kümeleme fonksiyonları ile WHERE ifadesi birlikte kullanılamadığından HAVING ifadesine ihtiyaç duyulmuştur. SQL having kullanımını aşağıdaki SQL having örnekeri ile açıklayalım.
I. ÖRNEK= 15 taneden az kitap okuyan öğrencilerin adı soyadı ve okuduğu kitap sayısını yazdırın en çok okuyandan en az okuyana sıralayınız.
1.Yöntem
1 2 3 4 5 6 7 |
select ograd,ogrsoyad ,count(*) from ogrenci,islem where ogrenci.ogrno=islem.ogrno group by ogrenci.ogrno,ograd,ogrsoyad having count (*)<15 order by count (*)desc |
2.Yöntem
1 2 3 4 5 |
select ograd,ogrsoyad ,count(*) sayi from ogrenci,islem where ogrenci.ogrno=islem.ogrno group by ogrenci.ogrno,ograd,ogrsoyad having count (*)<15 order by sayi desc |
2.ÖRNEK Aynı kitabı iki veya daha fazla okuyan öğrencileri listeleyiniz.
1 2 3 4 5 6 7 8 9 |
select ograd,ogrsoyad, kitapadi , count(*) from ogrenci,kitap,islem where kitap.kitapno=islem.kitapno and ogrenci.ogrno=islem.ogrno group by kitapadi,ogrenci.ogrno,ograd,ogrsoyad,ogrsoyad having count (*)>1 order by 4 desc |
3.ÖRNEK Aklın isyanı adlı kitabı 2 kereden fazla okuyan öğrencileri ve kaç kere okuduğunu listeleyiniz.
1 2 3 4 5 6 7 |
select kitapadi,ogrenci.ogrno,ogrsoyad,ograd, count(*) from ogrenci,kitap,islem where kitap.kitapno=islem.kitapno and ogrenci.ogrno=islem.ogrno and kitapadi='aklın isyanı' group by ogrenci.ogrno,ograd,ogrsoyad,kitapadi having count(*)>=2 |
4.ÖRNEK Arızalı olmayan ve 30 kereden fazla çıkan otobüsler otobüslerin plakasını ve kaç kere
sefere çıktığını listeleyiniz.
1 2 3 |
select plaka,count(*)'sefersayısı' from otobusler,seferler where otobusler.otobusno = seferler.otobusno and arizalimi=0 group by plaka having count (*)>30 |
Arkadaşlar Bir arkadaşımızın merakı üzerine tekrar bazı örnekler ekleyeceğim;
İd Ad Soyad yas Cinsiyet Sehir Ülke Maas
1 Ahmet Yılmaz 20 E Ankara Türkiye 2000
2 Mehmet Efe 22 E Bolu Türkiye 2000
3 Ayşe Can 23 K İstanbul Türkiye 3500
4 Fatma Ak 35 K Ankara Türkiye 3200
5 Jhon Smith 45 E New York USA 3500
6 Frank Cesanne 35 E Paris Fransa 3700
ÖRNEK; yaş ortalaması 30 un üzerinde olan ülkelerin maaş ortalamalarını getiren sorguyu yazmaya çalışalım. Burada 30 yaş üstü koşulu çalışanlar için değil ülkeler için yani gruplar geçerli.
1 2 3 |
SELECT ülke, AVG(maaş) FROM `kisiler` GROUP BY ülke HAVING AVG(yas) > 30 |
Sorgunun çıktısı aşağıdaki gibi olacaktır:
ülke | AVG(maaş) |
---|---|
Fransa | 3700.0000 |
USA | 3500.0000 |
Sorgunun döndürdüğü sonuç kümesine bakarak iki ülkenin (Türkiye ve Almanya) yaş ortalamalarının 30’dan küçük olduğunu söyleyebiliriz.
Arkadaşlar bu da son örneğimizdi !!!
Hocam sağolun. Örnekleri yazmışsınız. Ben sunuyu hazırlamıştım. Mevcut örnekler de yeterince faydalı oldu. İyi çalışmalar.
Yazı için teşekkürler Aycan hocam. Bu hafta sql having kavramı ile ilgili sunu hazırlayıp derste sunacağım. Çok faydası olacağını düşünüyorum. Yanlız bir sorum olacaktı having ifadesinden sonra count(*) yerine farklı şeyler de kullanılabilir mi? Kullanabilirsek onun için de örnek yazarmısınız.
İyi Günler Asyacım;
Aslında HAVİNG’ten sonra gelen Count(*) ifadesi Select ile ilişkili
dir. Kullandığımız Count(*) ifadesi yerine Avg,Sum,Max,Min gibi ifadelerde kullanabiliriz. Bunun için yazımda örnekler yayınlayacağım…
Çok güzel olmuş