A WHERE és a HAVING záradékot ebben a cikkben részletesen tárgyaljuk. Az SQL-lekérdezések rekordjainak szűrésére is szolgálnak. A WHERE és a HAVING záradék közötti különbség a leggyakoribb kérdés az interjú során. A fő különbség köztük az, hogy a WHERE záradékkal a rekordok szűrésének feltételét adják meg a csoportosítás előtt, míg a HAVING záradékkal egy csoportból származó értékek szűrésének feltételét adják meg. Az összehasonlítás előtt ezeket ismerjük meg SQL záradékok.
WHERE záradék
A WHERE záradék a MySQL-ben a SELECT mellett használatos, BESZÁLLÍTÁS , FRISSÍTÉS , és TÖRÖL lekérdezések adatok szűrésére a táblából vagy relációból. Egy adott feltételt ír le, amikor rekordokat kér le egyetlen táblából vagy több táblából a JOIN záradék használatával. Ha a megadott feltétel teljesül, akkor az adott értéket adja vissza a táblából. A WHERE záradék feltételeket helyez a kiválasztott oszlopokra.
str.substring java-ban
A WHERE záradék a MySQL-ben is megvalósítani a logikai kapcsolatokat ÉS , VAGY , és NEM. Boole-feltételként ismertek, aminek lennie kell igaz az adatok lekéréséhez. A logikai konnektív kifejezések operandusaikként használják az összehasonlító operátorokat<, ,>=, =, és . Az összehasonlító operátorokat általában karakterláncok és aritmetikai kifejezések összehasonlítására használják.,>
A következő szintaxis illusztrálja a WHERE záradék használatát:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Vegyünk egy példát ennek a záradéknak a megértéséhez. Tegyük fel, hogy van egy nevű táblázatunk alkalmazottak amely a következő adatokat tartalmazza:
Ha akarjuk hogy megkapja a 9-nél nagyobb munkaidejű munkavállaló adatait , akkor a következőképpen használhatjuk az utasítást:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Az alábbi kimenetet kapjuk, ahol láthatjuk az alkalmazottak adatait, akiknek a munkaideje meghaladja a 9 órát:
Ha a fenti lekérdezést használjuk a CSOPORTOSÍT záradékot, más eredményt kapunk:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Íme a kimenet:
HAVING záradék
HAVING záradék a MySQL-ben a GROUP BY-vel együtt használva záradék lehetővé teszi számunkra, hogy olyan feltételeket adjunk meg, amelyek szűrik, hogy melyik csoport eredményei jelenjenek meg az eredményben. Csak azokat az értékeket adja vissza a csoportokból a végeredményben, amelyek bizonyos feltételeknek megfelelnek. A WHERE és a HAVING záradékot együtt is használhatjuk a kiválasztás során. Ebben az esetben a WHERE záradék először kiszűri az egyes sorokat, majd a sorokat csoportosítja, összesített számításokat végez, végül a HAVING záradék szűri a csoportokat.
Ez a záradék feltételeket ír elő a GROUP BY záradék által létrehozott csoportokra. A WHERE záradékhoz hasonlóan viselkedik, ha az SQL utasítás nem használja a GROUP BY kulcsszót. Használhatjuk az összesítő (csoportos) függvényeket, mint a SUM , MIN, MAX, AVG és SZÁMOL csak két záradékkal: SELECT és HAVING.
A következő szintaxis szemlélteti a HAVING záradék használatát:
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Vegyünk egy példát ennek a záradéknak a megértéséhez. Itt ugyanazt a táblázatot vizsgáljuk alkalmazottak bemutatóra.
Ha akarjuk minden olyan alkalmazottra, akinek a munkaideje meghaladja a 6 órát, megkapja a teljes munkaórát , akkor a következőképpen használhatjuk az utasítást:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Az alábbi kimenetet kapjuk, ahol láthatjuk az egyes alkalmazottak teljes munkaidejét:
Főbb különbségek a WHERE és a HAVING záradék között
A következő pontok ismertetik az adatbázis és a séma közötti főbb különbségeket:
- A WHERE záradék az egyes sorokat szűri, míg a HAVING záradék a csoportokat szűri soronként egy sor helyett.
- A WHERE záradékot nem használhatjuk összesítő függvényekkel, mert az egyes sorok szűrésére szolgál. Ezzel szemben a HAVING tud működni aggregált függvényekkel, mert csoportok szűrésére szolgál.
- A sorműveleteket a WHERE záradék kezeli, míg a HAVING záradék az összesített sorok vagy csoportok oszlopműveleteit.
- A WHERE a GROUP BY elé kerül, ami azt jelenti, hogy a WHERE záradék kiszűri a sorokat az összesített számítások végrehajtása előtt. A HAVING a GROUP BY után következik, ami azt jelenti, hogy a HAVING záradék szűri a sorokat az összesített számítások végrehajtása után. Következésképpen a HAVING a hatékonyság szempontjából lassabb, mint a WHERE, és lehetőség szerint kerülni kell.
- A WHERE és a HAVING záradékot kombinálhatjuk egy SELECT lekérdezésben. Ebben az esetben először a WHERE záradékot használjuk az egyes sorok szűrésére. A sorokat ezután csoportosítja, összesített számításokat hajt végre, és végül a HAVING záradékot használja a csoportok szűrésére.
- A WHERE záradék lekéri a kívánt adatokat a megadott feltétel alapján. Másrészt a HAVING záradék először a teljes adatot kéri le, majd az elválasztás a megadott feltétel alapján történik.
- SELECT utasítás nélkül nem használhatjuk a HAVING záradékot. Ezzel szemben a WHERE-t használhatjuk a SELECT, UPDATE és DELETE utasításokkal.
- A WHERE záradék egy előszűrő, míg a HAVING záradék egy utószűrő.
WHERE vs. HAVING összehasonlító diagram
Az alábbi összehasonlító táblázat gyorsan elmagyarázza ezek főbb különbségeit:
Összehasonlítási alap | WHERE záradék | HAVING záradék |
---|---|---|
Meghatározás | Az egyes sorok szűrésére szolgál. | Csoportok szűrésére szolgál. |
Alapvető | Sorműveletekben valósul meg. | Ez oszlopműveletekben valósul meg. |
Adatok lekérése | A WHERE záradék lekéri a konkrét adatokat adott sorokból a megadott feltétel alapján | A HAVING záradék először lekéri a teljes adatokat. Ezután az adott feltételnek megfelelően szétválasztja őket. |
Összesített függvények | A WHERE záradék nem teszi lehetővé az összesített függvényekkel való munkát. | A HAVING záradék működhet aggregált függvényekkel. |
Ként működik | A WHERE záradék előszűrőként működik. | A HAVING záradék utószűrőként működik. |
Használt | Használhatjuk a WHERE záradékot a SELECT, UPDATE és DELETE utasításokkal. | A HAVING záradék csak a SELECT utasítással használható. |
CSOPORTOSÍT | A GROUP BY záradék a WHERE záradék után következik. | A GROUP BY záradék a HAVING záradék elé kerül. |
Következtetés
Ebben a cikkben összehasonlítottuk a WHERE és a HAVING záradékot. Itt arra a következtetésre jutunk, hogy mindkét záradék ugyanúgy működik az adatok szűrésében, kivéve, hogy néhány további funkció népszerűbbé teszi a HAVING záradékot. Hatékonyan dolgozhatunk aggregált függvényekkel a HAVING záradékban, míg a WHERE nem teszi lehetővé az aggregált függvényeket.