SQL’de WHERE ve HAVING Kullanımı

Fadime Akdoğan
2 min readAug 3, 2022

--

Merhabalar, Chippin firması Business Intelligence ekibine katıldığım gün itibariyle ekip içerisinde gelişimim için sağlanan katkıları kendime alırken diğer yandan Business Intelligence dünyasına yeni atılan kişilere öğrendiklerimi aktarabilmek için blog yazıları yazmaya karar verdim. İşte serimin ilk yazısı:

Bu yazıda SQL’de sık kullanılan komutlardan ikisi olan WHERE ve HAVING komutlarının kullanım şekillerini aktarmak amaçlanmaktadır.

WHERE, FROM tarafından ana tablodan getirilmesi istenen satırlarda bir filtre işlevi görmektedir. Yani sorguya bazı kısıtlamalar getirerek ana tablo içerisinden kullanılacak olan veriyi seçmektedir. Bu işlem gruplamadan önce yapılmaktadır. WHERE komutu, toplama işlevli koşullar olan aggregate fonksiyonlarda kullanılmamaktadır.

HAVING ise GROUP BY komutu ile gruplanmış olan veriden sonra filtreleme yapmaktadır. Bu sebeple gruplandıktan sonra bir filtre verilecekse o filtrede SUM, AVG, COUNT gibi aggregate fonksiyonların bulunması gerekmektedir.

Özetle; bütün bir tablodan belirli bir kısmı seçmek için filtreleme yapmak isteniyorsa WHERE kullanılır. İlgili kolona verilen topla, saydır, MAX-MIN gibi fonksiyonlara filtre verilmek isteniyorsa HAVING kullanılır.

WHERE ve HAVING’in Birlikte Kullanımı: Örnek Uygulama

Uygulama, aşağıdaki Suspects tablosu üzerinden yapılacaktır. Kullanım farkını aktarabilmek için ilk olarak sadece WHERE, ardından WHERE ve HAVING beraber kullanılacaktır.

İlk olarak tüm tablo çekildi:

SELECT * FROM suspects
Suspects Table

Şimdi adım adım ilgili kodlarda ne yapıldığını aktaracağım, böylelikle ne zaman ve neden HAVING kullanılır sorusu cevaplanmış olacak.

SELECT nationality, AVG(height)
FROM suspects
WHERE vegetarian='TRUE'
GROUP BY nationality
HAVING COUNT(id)>3

1. satıda SELECT ile milliyetlerini ve ortalama boy uzunluklarını seçiyorum, bu kısmı rastgele olarak seçtim başka sütunlarda seçilebilirdi,

2. satırda suspects tablosundan aldığımı belirtiyorum,

3. satırda tüm tablo içerisinden sadece vejetaryan olanları getirmesi için komut veriyorum,

4. satırda ülkelerin ayrı ayrı gelmemesi ve HAVING uygulayabilmek için grupluyorum,

5. satırda ise ülkelerde bulunan suçlu sayısı 3'ten büyük olanları getirmesini komutluyorum. Bu filtreyi WHERE’e veremezdim çünkü COUNT sütunlara uygulanan bir aggregate fonskiyon ve WHERE bu fonksiyon ile filtre uygulayamıyor.

Umarım faydalı olmuştur.

--

--

Fadime Akdoğan

İş Zekası Uzmanı - Koç Sistem/Chippin | Tecrübe edindiğim bilgileri paylaşmak mutluluk verdiği için buradayım. İletişim: www.linkedin.com/in/fadime-akdogan