Junior
Care este diferența dintre construcțiile WHERE și HAVING în SQL?
sobes.tech AI
Răspuns de la AI
WHERE filtrează rândurile înainte de grupare (GROUP BY), influențând care rânduri vor participa la funcțiile de agregare. HAVING filtrează grupurile după grupare, bazându-se pe rezultatele funcțiilor de agregare.
| Caracteristică | WHERE | HAVING |
|---|---|---|
| Aplicație | La rânduri individuale | La grupuri de rânduri |
| Timp de procesare | Înainte de GROUP BY | După GROUP BY |
| Utilizare | Cu câmpuri din tabel, dar fără funcții de agregare | Cu rezultate ale funcțiilor de agregare sau câmpuri din GROUP BY |
Exemplu de utilizare WHERE:
SELECT nume_produs, preț
FROM produse
WHERE category_id = 1; -- Filtrează rândurile **înainte** de grupare (dacă ar fi avut loc)
Exemplu de utilizare HAVING:
SELECT category_id, COUNT(*) AS total_produse
FROM produse
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtrează grupurile **după** numărarea totalului de produse
Exemplu de utilizare combinată:
SELECT category_id, AVG(preț) AS preț_mediu
FROM produse
WHERE stoc > 0 -- Filtrează doar produsele în stoc **înainte** de grupare
GROUP BY category_id
HAVING AVG(preț) < 100; -- Filtrează grupurile cu prețul mediu mai mic de 100 **după** grupare și calculul mediei