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ışlar3WHERE yıl = 20244GROUP BY musteri_id5HAVING 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ışlar3WHERE SUM(tutar) > 10004GROUP BY musteri_id;Doğru yapı:
1SELECT musteri_id, SUM(tutar)2FROM satışlar3GROUP BY musteri_id4HAVING 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.
0 yorum