SQL'de WHERE ve HAVING Farkı: Verileri Doğru Filtrelemek

SQL'de veri filtrelemek için iki temel araç vardır: WHERE ve HAVING. Çoğu kişi bunları karıştırır ama aralarında önemli bir fark vardır.

WHERE, satır seviyesinde filtreleme yapar. Sorgu çalışmaya başladığında, tablodan verileri çekmeden önce WHERE koşulunu uygular. Hangi satırları alacağını belirler. Örneğin, 2024 yılında satılan ürünleri bulmak için WHERE kullanırsın.

HAVING ise, GROUP BY ile gruplandırılan veriler üzerinde filtreleme yapar. Yani gruplar oluşturduktan sonra, bu gruplar üzerinde koşul uygularsın. Örneğin, 10'dan fazla satış yapan müşterileri bulmak için HAVING kullanırsın.

Praktik bir örnek:

1SELECT musteri_id, COUNT(*) as satış_sayısı
2FROM satışlar
3WHERE yıl = 2024
4GROUP BY musteri_id
5HAVING COUNT(*) > 5;

Burada WHERE, önce 2024 yılındaki satışları seçer. Sonra GROUP BY müşteri bazında gruplar. Son olarak HAVING, 5'ten fazla satışı olan grupları gösterir.

Bir başka önemli fark: WHERE'de toplam fonksiyonlar (COUNT, SUM, AVG vb.) kullanamaz. HAVING'de kullanabilirsin çünkü o zaman veriler zaten gruplandırılmış olur.

Yanlış yapı:

1SELECT musteri_id, SUM(tutar)
2FROM satışlar
3WHERE SUM(tutar) > 1000
4GROUP BY musteri_id;

Doğru yapı:

1SELECT musteri_id, SUM(tutar)
2FROM satışlar
3GROUP BY musteri_id
4HAVING SUM(tutar) > 1000;

Özet: WHERE bireysel satırları filtreler, HAVING grupları filtreler. İkisini doğru yerde kullanmak, sorguların hızını ve doğruluğunu etkiler.

konu hakkında tepkinizi verebilirsiniz