SQL’de WHERE ve HAVING Kullanımı

Fadime Akdoğan
2 min readAug 3, 2022

--

Merhabalar, bu yazıda SQL’de sık kullanılan komutlardan ikisi olan WHERE ve HAVING komutlarının kullanım şekilleri ve farkını 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, hesaplamalı koşulları filtrelemek için kullanılamaz.

HAVING ise GROUP BY komutu ile gruplanmış olan veriden sonra hesaplamalı koşullara filtreleme yapmaktadır. Bu sebeple gruplandıktan sonra bir filtre verilecekse o filtre HAVING ile yapılır ve ilgili sorguda muhakkak SUM, AVG, COUNT gibi hesaplamalı koşulları filtrelemek için kullanılır.

Özetle; bütün bir tablodan belirli bir kolon için filtreleme yapmak isteniyorsa WHERE kullanılır. İlgili kolona topla, saydır, MAX-MIN-COUNT 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 fonksiyon ve WHERE bu fonksiyon ile filtre uygulayamıyor.

Faydalı olması dileğim ile.

--

--

Fadime Akdoğan

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