Înțelegerea secvenței în care să se plaseze clauzele WHERE, GROUP BY și HAVING ajută la crearea unor interogări eficiente.
Clauza WHERE este folosită pentru a filtra rândurile rezultate din operațiile specificate în clauza FROM.
Clauza GROUP BY este utilizată pentru a grupa ieșirea din clauza WHERE.
Clauza HAVING este folosită pentru a filtra rândurile rezultatelor grupate.
Orice condiție de căutare care se aplică înainte sau după operația de grupare este indicată cel mai bine în clauza WHERE. Aceasta reduce numărul de rânduri pentru care se efectuează gruparea. Singurii termeni de căutare care ar trebui specificați în clauza HAVING sunt acelea care ar trebui să fie aplicate după operația de grupare.
Optimizatorul de interogări Microsoft SQL Server poate gestiona majoritatea acestor condiții. Dacă determină că condiția de căutare din clauza HAVING poate fi aplicată înainte de operația de grupare, aceasta se întâmplă. Optimizatorul de interogări poate să nu recunoască toate condițiile de căutare pentru clauza HAVING care poate fi aplicată înainte de operația de grupare. Este recomandat să specificați toți acești termeni de căutare în clauza WHERE, nu în clauza HAVING.
Următorul exemplu prezintă o clauză HAVING cu o funcție agregată. În acesta, rândurile din tabelul SalesOrderDetail sunt grupate după codul produsului, apoi produsele sunt șterse, numărul mediu de comenzi pentru care este mai mic de cinci.