Clauzele WHERE și HAVING sunt discutate în profunzime în acest articol. De asemenea, sunt folosite pentru a filtra înregistrările în interogările SQL. Diferența dintre clauza WHERE și HAVING este cea mai frecventă întrebare pusă în timpul unui interviu. Principala diferență dintre ele este că clauza WHERE este folosită pentru a specifica o condiție pentru filtrarea înregistrărilor înainte de a se face orice grupare, în timp ce clauza HAVING este folosită pentru a specifica o condiție pentru filtrarea valorilor dintr-un grup. Înainte de a face comparația, le vom ști mai întâi pe acestea SQL clauze.
xd sens
CLAUZA UNDE
Clauza WHERE din MySQL este folosită cu SELECT , INTRODUCE , ACTUALIZAȚI , și ȘTERGE interogări pentru a filtra datele din tabel sau din relație. Descrie o condiție specifică la preluarea înregistrărilor dintr-un singur tabel sau mai multe tabele folosind clauza JOIN. Dacă condiția specificată este îndeplinită, returnează valoarea particulară din tabel. Clauza WHERE pune condiții pe coloanele selectate.
Clauza WHERE din MySQL poate, de asemenea implementează conexiunile logice ȘI, SAU și NU. Ele sunt cunoscute ca starea booleană care trebuie să fie Adevărat pentru a prelua datele. Expresiile conjunctive logice folosesc operatorii de comparație ca operanzii lor<, ,>=, = și. Operatorii de comparație sunt de obicei utilizați pentru a compara șiruri și expresii aritmetice.,>
Următoarea sintaxă ilustrează utilizarea clauzei WHERE:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Să luăm un exemplu pentru a înțelege această clauză. Să presupunem că avem un tabel numit angajati care contin urmatoarele date:
Dacă vrem pentru a obține detaliile angajatului al cărui program de lucru este mai mare de 9 , atunci putem folosi declarația după cum urmează:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Vom obține rezultatul de mai jos, unde putem vedea detaliile angajaților ale căror ore de lucru sunt mai mari de 9:
int la char java
Dacă folosim interogarea de mai sus cu A SE GRUPA CU clauza , vom obține rezultatul diferit:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Iată rezultatul:
noroc
HAVING Clauza
Clauza HAVING în MySQL folosit împreună cu GROUP BY clauza ne permite să specificăm condițiile care filtrează rezultatele grupului care apar în rezultat. Returnează doar acele valori din grupurile din rezultatul final care îndeplinesc anumite condiții. Putem folosi, de asemenea, clauzele WHERE și HAVING împreună în timpul selecției. În acest caz, clauza WHERE filtrează mai întâi rândurile individuale, apoi rândurile sunt grupate, efectuează calcule agregate și, în sfârșit, clauza HAVING filtrează grupurile.
Această clauză pune condiții asupra grupurilor create de clauza GROUP BY. Se comportă ca clauza WHERE când instrucțiunea SQL nu folosește cuvântul cheie GROUP BY. Putem folosi funcțiile de agregare (grup), cum ar fi SUM , MIN, MAX, AVG și NUMARA numai cu două clauze: SELECT și HAVING.
Următoarea sintaxă ilustrează utilizarea clauzei HAVING:
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Să luăm un exemplu pentru a înțelege această clauză. Aici luăm în considerare același tabel angajati pentru demonstrație.
Dacă vrem pentru a obține orele totale de lucru pentru fiecare angajat al cărui timp de lucru este mai mare de 6 ore , atunci putem folosi declarația după cum urmează:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Vom obține rezultatul de mai jos, unde putem vedea orele totale de lucru ale fiecărui angajat:
Diferențele cheie între clauza WHERE și HAVING
Următoarele puncte explică principalele diferențe dintre baza de date și schemă:
algoritm de căutare binar
- Clauza WHERE filtrează rândurile individuale, în timp ce clauza HAVING filtrează grupuri în loc de un rând pe rând.
- Nu putem folosi clauza WHERE cu funcții agregate, deoarece funcționează pentru filtrarea rândurilor individuale. În schimb, HAVING poate funcționa cu funcții de agregare, deoarece este folosit pentru a filtra grupuri.
- Operațiile pe rând sunt gestionate de clauza WHERE, în timp ce clauza HAVING gestionează operațiunile pe coloană pentru rânduri sau grupuri rezumate.
- WHERE apare înaintea GROUP BY, ceea ce înseamnă că clauza WHERE filtrează rândurile înainte de a efectua calcule agregate. HAVING vine după GROUP BY, ceea ce înseamnă că clauza HAVING filtrează rândurile după efectuarea calculelor agregate. În consecință, HAVING este mai lent decât WHERE din punct de vedere al eficienței și ar trebui evitat ori de câte ori este posibil.
- Putem combina clauzele WHERE și HAVING împreună într-o interogare SELECT. În acest caz, clauza WHERE este folosită mai întâi pentru a filtra rândurile individuale. Rândurile sunt apoi grupate, efectuează calcule agregate și, în final, clauza HAVING este folosită pentru a filtra grupurile.
- Clauza WHERE preia datele dorite pe baza condiției specificate. Pe de altă parte, clauza HAVING preia mai întâi datele întregi, iar apoi separarea se face pe baza condiției specificate.
- Fără o instrucțiune SELECT, nu putem folosi clauza HAVING. În schimb, putem folosi un WHERE cu instrucțiunile SELECT, UPDATE și DELETE.
- Clauza WHERE este un pre-filtru, în timp ce clauza HAVING este un post-filtru.
WHERE vs. HAVING Tabel de comparație
Următorul grafic de comparație explică principalele diferențe ale acestora într-un mod rapid:
Baza de comparație | CLAUZA UNDE | HAVING Clauza |
---|---|---|
Definiție | Este folosit pentru a efectua filtrarea pe rânduri individuale. | Este folosit pentru a efectua filtrarea pe grupuri. |
De bază | Este implementat în operațiuni pe rând. | Este implementat în operațiuni pe coloană. |
Preluarea datelor | Clauza WHERE preia datele specifice din anumite rânduri pe baza condiției specificate | Clauza HAVING preia mai întâi datele complete. Apoi le separă în funcție de condiția dată. |
Funcții agregate | Clauza WHERE nu permite lucrul cu funcții agregate. | Clauza HAVING poate funcționa cu funcții agregate. |
Acționează ca | Clauza WHERE acționează ca un prefiltru. | Clauza HAVING acționează ca un post-filtru. |
Folosit cu | Putem folosi clauza WHERE cu instrucțiunile SELECT, UPDATE și DELETE. | Clauza HAVING poate fi utilizată numai cu instrucțiunea SELECT. |
A SE GRUPA CU | Clauza GROUP BY vine după clauza WHERE. | Clauza GROUP BY vine înaintea clauzei HAVING. |
Concluzie
În acest articol, am făcut o comparație între clauza WHERE și HAVING. Aici, concluzionăm că ambele clauze funcționează în același mod în filtrarea datelor, cu excepția faptului că unele caracteristici suplimentare fac clauza HAVING mai populară. Putem lucra eficient cu funcții agregate în clauza HAVING, în timp ce WHERE nu permite funcții agregate.