Klauzuly WHERE a HAVING sú podrobne rozoberané v tomto článku. Používajú sa aj na filtrovanie záznamov v dotazoch SQL. Rozdiel medzi klauzulou WHERE a HAVING je najčastejšou otázkou počas rozhovoru. Hlavný rozdiel medzi nimi je v tom, že klauzula WHERE sa používa na špecifikáciu podmienky na filtrovanie záznamov pred vytvorením akýchkoľvek zoskupení, zatiaľ čo klauzula HAVING sa používa na špecifikáciu podmienky na filtrovanie hodnôt zo skupiny. Pred porovnaním sa najprv dozvieme tieto SQL klauzuly.
Klauzula WHERE
Klauzula WHERE v MySQL sa používa s SELECT, VLOŽIŤ , AKTUALIZOVAŤ , a VYMAZAŤ dotazy na filtrovanie údajov z tabuľky alebo vzťahu. Opisuje špecifický stav pri získavaní záznamov z jednej tabuľky alebo viacerých tabuliek pomocou klauzuly JOIN. Ak je zadaná podmienka splnená, vráti konkrétnu hodnotu z tabuľky. Klauzula WHERE umiestňuje podmienky na vybraté stĺpce.
Klauzula WHERE v MySQL môže tiež implementovať logické spojky A , ALEBO a NIE. Sú známe ako booleovská podmienka, ktorá musí byť pravda na získanie údajov. Výrazy logických spojovacích prvkov používajú operátory porovnávania podľa toho, ako ich operandy<, ,>=, = a . Porovnávacie operátory sa zvyčajne používajú na porovnávanie reťazcov a aritmetických výrazov.,>
Nasledujúca syntax ilustruje použitie klauzuly WHERE:
755 chmod
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Zoberme si príklad, aby sme pochopili túto vetu. Predpokladajme, že máme tabuľku s názvom zamestnancov ktoré obsahujú nasledujúce údaje:
importovať skener java
Ak chceme získať podrobnosti o zamestnancovi, ktorého pracovný čas je dlhší ako 9 , potom môžeme použiť príkaz takto:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Získame výstup uvedený nižšie, kde môžeme vidieť podrobnosti o zamestnancovi, ktorého pracovný čas je dlhší ako 9:
Ak použijeme vyššie uvedený dotaz s GROUP BY klauzula , dostaneme iný výsledok:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Tu je výstup:
Doložka HAVING
Klauzula HAVING v MySQL používa sa v spojení s GROUP BY klauzula nám umožňuje špecifikovať podmienky, ktoré filtrujú, ktoré výsledky skupiny sa objavia vo výsledku. Vráti len tie hodnoty zo skupín v konečnom výsledku, ktoré spĺňajú určité podmienky. Pri výbere môžeme použiť aj klauzulu WHERE a HAVING spolu. V tomto prípade klauzula WHERE najprv filtruje jednotlivé riadky, potom sa riadky zoskupujú, vykonáva súhrnné výpočty a nakoniec klauzula HAVING filtruje skupiny.
Táto klauzula kladie podmienky na skupiny vytvorené klauzulou GROUP BY. Správa sa ako klauzula WHERE, keď príkaz SQL nepoužíva kľúčové slovo GROUP BY. Môžeme použiť agregačné (skupinové) funkcie ako SUM, MIN, MAX, AVG a COUNT len s dvoma vetnými členmi: SELECT a HAVING.
Nasledujúca syntax ilustruje použitie klauzuly HAVING:
negácia diskrétna matematika
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Zoberme si príklad, aby sme pochopili túto vetu. Tu uvažujeme o rovnakej tabuľke zamestnancov na demonštráciu.
počítačová organizácia a architektúra
Ak chceme získať celkový pracovný čas za každého zamestnanca, ktorého pracovný čas je dlhší ako 6 hodín , potom môžeme použiť príkaz takto:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Získame nasledujúci výstup, kde môžeme vidieť celkový pracovný čas každého zamestnanca:
Kľúčové rozdiely medzi doložkou WHERE a HAVING
Nasledujúce body vysvetľujú hlavné rozdiely medzi databázou a schémou:
- Klauzula WHERE filtruje jednotlivé riadky, zatiaľ čo klauzula HAVING filtruje skupiny namiesto jedného riadka naraz.
- Klauzulu WHERE nemôžeme použiť s agregačnými funkciami, pretože funguje na filtrovanie jednotlivých riadkov. Na rozdiel od toho HAVING môže pracovať s agregačnými funkciami, pretože sa používa na filtrovanie skupín.
- Riadkové operácie spracováva klauzula WHERE, zatiaľ čo klauzula HAVING spracováva stĺpcové operácie so súhrnnými riadkami alebo skupinami.
- WHERE je pred GROUP BY, čo znamená filtrovanie riadkov klauzuly WHERE pred vykonaním súhrnných výpočtov. HAVING nasleduje po GROUP BY, čo znamená, že klauzula HAVING filtruje riadky po vykonaní súhrnných výpočtov. V dôsledku toho je HAVING z hľadiska efektívnosti pomalší ako WHERE a treba sa mu vyhnúť všade tam, kde je to možné.
- Klauzuly WHERE a HAVING môžeme spojiť do SELECT dotazu. V tomto prípade sa na filtrovanie jednotlivých riadkov najskôr použije klauzula WHERE. Riadky sa potom zoskupia, vykonajú sa súhrnné výpočty a nakoniec sa na filtrovanie skupín použije klauzula HAVING.
- Klauzula WHERE načíta požadované údaje na základe špecifikovanej podmienky. Na druhej strane klauzula HAVING najprv načíta celé údaje a potom sa uskutoční oddelenie na základe špecifikovanej podmienky.
- Bez príkazu SELECT nemôžeme použiť klauzulu HAVING. Naopak, môžeme použiť WHERE s príkazmi SELECT, UPDATE a DELETE.
- Klauzula WHERE je predbežný filter, zatiaľ čo klauzula HAVING je dodatočný filter.
Porovnávacia tabuľka WHERE vs
Nasledujúca porovnávacia tabuľka rýchlo vysvetľuje ich hlavné rozdiely:
Základ porovnania | Klauzula WHERE | Doložka HAVING |
---|---|---|
Definícia | Slúži na vykonávanie filtrácie na jednotlivých radoch. | Používa sa na vykonávanie filtrácie na skupinách. |
Základné | Realizuje sa v riadkových operáciách. | Je implementovaný v stĺpcových operáciách. |
Načítavanie údajov | Klauzula WHERE načítava špecifické údaje z konkrétnych riadkov na základe špecifikovanej podmienky | Klauzula HAVING najskôr načíta kompletné údaje. Následne ich oddelí podľa daného stavu. |
Agregátne funkcie | Klauzula WHERE neumožňuje pracovať s agregačnými funkciami. | Klauzula HAVING môže pracovať s agregačnými funkciami. |
Chovať sa ako | Klauzula WHERE funguje ako predfilter. | Klauzula HAVING funguje ako post-filter. |
Používa sa s | Klauzulu WHERE môžeme použiť s príkazmi SELECT, UPDATE a DELETE. | Klauzula HAVING sa môže použiť iba s príkazom SELECT. |
GROUP BY | Klauzula GROUP BY nasleduje po klauzule WHERE. | Klauzula GROUP BY sa nachádza pred klauzulou HAVING. |
Záver
V tomto článku sme porovnali klauzulu WHERE a HAVING. Tu sme dospeli k záveru, že obe klauzuly fungujú pri filtrovaní údajov rovnakým spôsobom, až na to, že vďaka určitej dodatočnej funkcii je klauzula HAVING populárnejšia. Môžeme efektívne pracovať s agregačnými funkciami v klauzule HAVING, zatiaľ čo WHERE neumožňuje agregované funkcie.