MsSQL SQL

SQL HAVING Kavramı

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

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

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.

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.

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.

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.

SELECT ülke, AVG(maaş) FROM `kisiler` GROUP BY ülke HAVING AVG(yas) > 30

Sorgunun çıktısı aşağıdaki gibi olacaktır:

ülkeAVG(maaş)
Fransa3700.0000
USA3500.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 !!!

 

 

 

 

Yorum

  • 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…

Yorum Yap