logo

A WHERE és a HAVING közötti különbség

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 vs HAVING

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:

WHERE vs HAVING

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&gt; SELECT * FROM employees WHERE working_hour &gt; 9; 

Az alábbi kimenetet kapjuk, ahol láthatjuk az alkalmazottak adatait, akiknek a munkaideje meghaladja a 9 órát:

WHERE vs HAVING

Ha a fenti lekérdezést használjuk a CSOPORTOSÍT záradékot, más eredményt kapunk:

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9 GROUP BY name; 

Íme a kimenet:

WHERE vs HAVING

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&gt; SELECT name, SUM(working_hour) AS &apos;Total working hours&apos; FROM employees GROUP BY name HAVING SUM(working_hour) &gt; 6; 

Az alábbi kimenetet kapjuk, ahol láthatjuk az egyes alkalmazottak teljes munkaidejét:

WHERE vs HAVING

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.