Sobes.tech
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