MS SQL Dersleri – 11 HAVING Kullanımı
Bu yazımızda MS SQL’de filtreleme görevi gören HAVING komutunu inceleyip, WHERE komutu ile olan farklılıklarını anlamaya çalışıcağız.
HAVING ile WHERE komutu arasında ki en belirgin fark WHERE komutu geçen dersimizde gördüğümüz GROUP BY komutundan önce HAVING komutu ise sonra kullanılır. HAVING komutu ile WHERE komutu aksine kümeleme fonksiyonları kullanılabilir. Örneklerle kullanımını inceleyelim.
Öncelikle müşteri tablomuzda ki dataları görelim.

Tablomuzdan öncelikle GROUP BY kullanarak ‘DogumYeri’ alanını gruplayarak getirelim.
SELECT DogumYeri
FROM dbo.Musteri
GROUP BY DogumYeri

Şimdi ise Bakiye alanının toplamı 1400’ü geçen geçen şartını HAVING ile ekleyelim.
SELECT DogumYeri
FROM dbo.Musteri
GROUP BY DogumYeri
HAVING SUM(Bakiye) > 1400

Sonucu incelediğimizde İstanbul ilinin toplam bakiyesi 2600 olduğu için sorgumuz sonucunda geldi. İzmir 0 bakiye de olduğu için kümemize giremedi. Sorgumuzda kullanmış olduğumuz SUM fonksiyonu bize belirli bir kolondaki rakamların toplamını döner. Bu fonksiyonu ileri ki yazılarımızda detaylıca inceliyor olacağız. Peki bu sorguya ek olarak işlemlerin sadece Soyadı Aravi olan müşteriler için uygulanmasını isteyelim.
SELECT DogumYeri
FROM dbo.Musteri
WHERE Soyadi = N'Aravi'
GROUP BY DogumYeri
HAVING SUM(Bakiye) > 1400

Sonuç olarak hiç bir data dönmedi. Çünkü sorgumuzu incelersek İstanbul doğumlu ve Aravi soyadlı müşterilerin bakiye toplamı 1400’ün altında kalıyor.
Bu örnek ile ilgili akla gelebilecek soru WHERE komutuna eklediğimiz ‘Soyadi’ alanını AND ile HAVING’e eklenip sorgudan aynı sonuç alınamaz mıydı?
Evet, HAVING ile birlikte GROUP BY komutunun yanına da ‘Soyadi’ alanını ekleyerek aynı sonuca varabilirdik fakat WHERE komutu GROUP BY ve HAVING komutundan önce çalışmaktadır. Büyük datalar ile çalıştığımızda performans için öncelikle WHERE komutu ile filtrelenmesi gereken alanları belirtip, küçülmüş küme üzerinden GROUP BY ve HAVING işlemlerinin yapılmasını sağlamalıyız.
Umarım yazım konunun anlaşılması adına yararlı olmuştur. Konuyla ilgili eksik gördüğünüz veya sormak istediğiniz sorular için mail adresimden veya yorumlardan bana ulaşabilirsiniz.