HAVING, GROUP BY ile birlikte kullanılan ve gruplama sonucunu filtrelemenizi sağlayan bir yapıdır. WHERE ile karıştırılmaya en müsait konulardan biridir — aradaki farkı net bir örnekle görelim.
Örnek: Ülkelere Göre Ortalama Nakliye Ücreti
SELECT [Sevk Ülkesi], AVG([Nakliye Ücreti]) AS OrtalamaNakliye
FROM Satışlar
GROUP BY [Sevk Ülkesi];
Bu sorgu her ülke için ortalama nakliye ücretini hesaplar.
WHERE: Gruplamadan Önce, Ham Veriyi Filtreler
SELECT [Sevk Ülkesi], AVG([Nakliye Ücreti]) AS OrtalamaNakliye
FROM Satışlar
WHERE PersonelID = 5
GROUP BY [Sevk Ülkesi];
Burada WHERE, gruplama yapılmadan önce yalnızca PersonelID = 5 olan satırları filtreye alır — ortalamalar bu alt kümeye göre hesaplanır.
HAVING: Gruplamadan Sonra, Sonucu Filtreler
SELECT [Sevk Ülkesi], AVG([Nakliye Ücreti]) AS OrtalamaNakliye
FROM Satışlar
GROUP BY [Sevk Ülkesi]
HAVING AVG([Nakliye Ücreti]) < 50;
Burada önce tüm veri gruplanıp her ülke için ortalama hesaplanır, HAVING ise bu hesaplanmış sonuç üzerinden yalnızca ortalaması 50'nin altında olan ülkeleri bırakır.
Özet: WHERE vs HAVING
| Ne zaman çalışır | Neyi filtreler | |
|---|---|---|
WHERE |
Gruplamadan önce | Ham satırları |
HAVING |
Gruplamadan sonra | Gruplanmış/hesaplanmış sonucu |
Kural: SUM, AVG, COUNT gibi bir toplu fonksiyonun sonucuna göre filtreleme yapmak istiyorsanız HAVING kullanmanız gerekir — WHERE içinde bu fonksiyonları doğrudan kullanamazsınız.
Sırada Ne Var?
Buraya kadar veri okuma sorgularını işledik. Sırada tablo oluşturma ve silme komutları olan CREATE TABLE ve DROP TABLE var.