Junior
SQL-də WHERE və HAVING quruluşları arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
WHERE, sətirləri qruplaşdırmadan (GROUP BY) əvvəl filtrləyir, hansı sətirlərin toplama funksiyalarında iştirak edəcəyinə təsir edir. HAVING, qrupları sonra filtrləyir və toplama funksiyalarının nəticələrinə əsaslanır.
| Xüsusiyyət | WHERE | HAVING |
|---|---|---|
| Tətbiq | Fərdi sətirlərə | Sətir qruplarına |
| Emal vaxtı | GROUP BY-dən əvvəl | GROUP BY-dən sonra |
| İstifadə | Cədvəldən sahələrlə, lakin toplama funksiyaları olmadan | Toplama funksiyaları və ya GROUP BY sahələri ilə |
WHERE istifadə nümunəsi:
SELECT məhsul_adı, qiymət
FROM məhsullar
WHERE category_id = 1; -- Sətirləri **qruplaşdırmadan** əvvəl filtrləyir (əgər olsaydı)
HAVING istifadə nümunəsi:
SELECT category_id, COUNT(*) AS ümumi_məhsullar
FROM məhsullar
GROUP BY category_id
HAVING COUNT(*) > 5; -- Ümumi məhsul sayını hesablamaqdən **sonra** qrupları filtrləyir
Birlikdə istifadə nümunəsi:
SELECT category_id, AVG(qiymət) AS orta_qiymət
FROM məhsullar
WHERE stok > 0 -- Yalnız stokda olan məhsulları **qruplaşdırmadan** əvvəl filtrləyir
GROUP BY category_id
HAVING AVG(qiymət) < 100; -- Orta qiyməti 100-dən aşağı olan qrupları **sonra** filtrləyir