U ovom se članku detaljno raspravlja o rečenicama WHERE i HAVING. Također se koriste za filtriranje zapisa u SQL upitima. Razlika između WHERE i HAVING klauzule je najčešće pitanje koje se postavlja tijekom intervjua. Glavna razlika između njih je u tome što se klauzula WHERE koristi za određivanje uvjeta za filtriranje zapisa prije nego što se napravi bilo kakvo grupiranje, dok se klauzula HAVING koristi za određivanje uvjeta za filtriranje vrijednosti iz grupe. Prije usporedbe prvo ćemo ih znati SQL klauzule.
WHERE klauzula
WHERE klauzula u MySQL-u koristi se s SELECT, UMETNUTI , AŽURIRAJ , i IZBRISATI upite za filtriranje podataka iz tablice ili relacije. Opisuje specifično stanje pri dohvaćanju zapisa iz jedne tablice ili više tablica korištenjem JOIN klauzule. Ako je navedeni uvjet zadovoljen, vraća određenu vrijednost iz tablice. Odredba WHERE postavlja uvjete na odabrane stupce.
WHERE klauzula u MySQL također može implementirati logičke veznike I , ILI , i NE. Oni su poznati kao Booleov uvjet koji mora biti pravi za dohvaćanje podataka. Logički konektivni izrazi koriste operatore usporedbe kao svoje operande<, ,>=, = i . Operatori usporedbe obično se koriste za usporedbu nizova i aritmetičkih izraza.,>
Sljedeća sintaksa ilustrira upotrebu odredbe WHERE:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Uzmimo primjer da bismo razumjeli ovu klauzulu. Pretpostavimo da imamo tablicu pod imenom zaposlenici koji sadrže sljedeće podatke:
java arraylist
Ako želimo da biste dobili podatke o zaposleniku čije je radno vrijeme duže od 9 , tada iskaz možemo koristiti na sljedeći način:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Dobit ćemo donji rezultat gdje možemo vidjeti pojedinosti o zaposleniku čije je radno vrijeme duže od 9:
Ako koristimo gornji upit s GRUPIRAJ PO klauzule, dobit ćemo drugačiji rezultat:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Evo rezultata:
HAVING klauzula
HAVING klauzula u MySQL-u koristi se zajedno s GROUP BY klauzula nam omogućuje da odredimo uvjete koji filtriraju koji se grupni rezultati pojavljuju u rezultatu. Vraća samo one vrijednosti iz grupa u konačnom rezultatu koje ispunjavaju određene uvjete. Također možemo koristiti WHERE i HAVING klauzulu zajedno tijekom odabira. U ovom slučaju klauzula WHERE najprije filtrira pojedinačne retke, zatim se retci grupiraju, izvode skupne izračune i na kraju klauzula HAVING filtrira grupe.
Ova klauzula postavlja uvjete na grupe stvorene klauzulom GROUP BY. Ponaša se kao klauzula WHERE kada SQL izjava ne koristi ključnu riječ GROUP BY. Možemo koristiti agregatne (grupne) funkcije kao što su SUM, MIN, MAX, AVG i RAČUNATI samo s dvije rečenice: SELECT i HAVING.
središnji css gumb
Sljedeća sintaksa ilustrira upotrebu klauzule HAVING:
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Uzmimo primjer da bismo razumjeli ovu klauzulu. Ovdje razmatramo istu tablicu zaposlenici za demonstraciju.
Ako želimo dobiti ukupno radno vrijeme za svakog zaposlenika čije je radno vrijeme duže od 6 sati , tada iskaz možemo koristiti na sljedeći način:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Dobit ćemo donji rezultat gdje možemo vidjeti ukupno radno vrijeme svakog zaposlenika:
Ključne razlike između WHERE i HAVING klauzule
Sljedeće točke objašnjavaju glavne razlike između baze podataka i sheme:
- WHERE klauzula filtrira pojedinačne retke, dok HAVING klauzula filtrira grupe umjesto jedan po jedan redak.
- Ne možemo koristiti klauzulu WHERE s agregatnim funkcijama jer radi za filtriranje pojedinačnih redaka. Nasuprot tome, HAVING može raditi s agregatnim funkcijama jer se koristi za filtriranje grupa.
- Operacijama redaka upravlja klauzula WHERE, dok klauzula HAVING rukuje operacijama stupaca za sažete retke ili grupe.
- WHERE dolazi prije GROUP BY, što znači WHERE klauzula filtrira retke prije izvođenja agregatnih izračuna. HAVING dolazi nakon GROUP BY, što znači da klauzula HAVING filtrira retke nakon izvođenja skupnih izračuna. Posljedično, HAVING je sporiji od WHERE u smislu učinkovitosti i treba ga izbjegavati gdje god je to moguće.
- Možemo zajedno kombinirati WHERE i HAVING klauzulu u SELECT upitu. U ovom slučaju, klauzula WHERE se prvo koristi za filtriranje pojedinačnih redaka. Redovi se zatim grupiraju, izvode skupne izračune i na kraju se klauzula HAVING koristi za filtriranje grupa.
- WHERE klauzula dohvaća željene podatke na temelju navedenog uvjeta. S druge strane, klauzula HAVING prvo dohvaća cijele podatke, a zatim se vrši odvajanje na temelju navedenog uvjeta.
- Bez naredbe SELECT ne možemo koristiti klauzulu HAVING. Suprotno tome, možemo koristiti WHERE s izjavama SELECT, UPDATE i DELETE.
- WHERE klauzula je predfilter, dok je HAVING klauzula postfilter.
Tablica usporedbe WHERE nasuprot HAVING
Sljedeća usporedna tablica na brz način objašnjava njihove glavne razlike:
for petlja u c
Osnova usporedbe | WHERE klauzula | HAVING klauzula |
---|---|---|
Definicija | Koristi se za izvođenje filtracije na pojedinačnim redovima. | Koristi se za izvođenje filtracije grupa. |
Osnovni, temeljni | Implementiran je u operacijama redaka. | Implementira se u kolonskim operacijama. |
Dohvaćanje podataka | Klauzula WHERE dohvaća specifične podatke iz određenih redaka na temelju navedenog uvjeta | Klauzula HAVING prvo dohvaća kompletne podatke. Zatim ih razdvaja prema zadanom stanju. |
Agregatne funkcije | WHERE klauzula ne dopušta rad s agregatnim funkcijama. | Klauzula HAVING može raditi s agregatnim funkcijama. |
Glumiti kao | WHERE klauzula djeluje kao predfilter. | Klauzula HAVING djeluje kao postfilter. |
Koristi se sa | Možemo koristiti WHERE klauzulu s izjavama SELECT, UPDATE i DELETE. | Klauzula HAVING može se koristiti samo s naredbom SELECT. |
GRUPIRAJ PO | Klauzula GROUP BY dolazi nakon klauzule WHERE. | Klauzula GROUP BY dolazi prije klauzule HAVING. |
Zaključak
U ovom smo članku napravili usporedbu između WHERE i HAVING klauzule. Ovdje zaključujemo da obje klauzule rade na isti način u filtriranju podataka, osim što neka dodatna značajka čini klauzulu HAVING popularnijom. Možemo učinkovito raditi s agregatnim funkcijama u klauzuli HAVING dok WHERE ne dopušta agregatne funkcije.