logo

Ero WHERE:n ja HAVINGin välillä

WHERE- ja HAVING-lauseita käsitellään perusteellisesti tässä artikkelissa. Niitä käytetään myös tietueiden suodattamiseen SQL-kyselyissä. WHERE- ja HAVING-lausekkeiden ero on yleisin haastattelun aikana esitetty kysymys. Suurin ero niiden välillä on, että WHERE-lausetta käytetään määrittämään ehto tietueiden suodattamiselle ennen ryhmittelyä, kun taas HAVING-lausetta käytetään määrittämään ehto arvojen suodattamiselle ryhmästä. Ennen kuin teemme vertailua, tunnemme nämä ensin SQL lausekkeita.

WHERE vs HAVING

WHERE-lauseke

MySQL:n WHERE-lausetta käytetään SELECT:n kanssa, LISÄÄ , PÄIVITTÄÄ , ja POISTAA kyselyt tietojen suodattamiseksi taulukosta tai suhteesta. Se kuvaa tietyn ehdon, kun tietueita haetaan yhdestä taulukosta tai useista taulukoista JOIN-lauseen avulla. Jos määritetty ehto täyttyy, se palauttaa tietyn arvon taulukosta. WHERE-lause asettaa ehtoja valittuihin sarakkeisiin.

MySQL:n WHERE-lause voi myös toteuttaa loogiset liitännät JA , TAI ja EI. Ne tunnetaan Boolen ehtona, jonka täytyy olla totta tietojen hakemiseksi. Loogiset konnektiivilausekkeet käyttävät vertailuoperaattoreita operandeinaan<, ,>=, = ja . Vertailuoperaattoreita käytetään yleensä merkkijonojen ja aritmeettisten lausekkeiden vertailuun.

Seuraava syntaksi havainnollistaa WHERE-lauseen käyttöä:

 SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists; 

Otetaan esimerkki tämän lausekkeen ymmärtämiseksi. Oletetaan, että meillä on taulukko nimeltä työntekijät jotka sisältävät seuraavat tiedot:

WHERE vs HAVING

Jos haluamme saada tiedot työntekijästä, jonka työaika on yli 9 , voimme käyttää lausetta seuraavasti:

10 ml oz
 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9; 

Saamme alla olevan lähdön, jossa voimme nähdä työntekijän tiedot, joiden työtunnit ovat yli 9:

yhteyden muodostaminen java-tietokantaan
WHERE vs HAVING

Jos käytämme yllä olevaa kyselyä GROUP BY lauseke, saamme erilaisen tuloksen:

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

Tässä on tulos:

WHERE vs HAVING

HAVING lauseke

HAVING lauseke MySQL:ssä käytetään yhdessä GROUP BY:n kanssa Lause antaa meille mahdollisuuden määrittää ehdot, jotka suodattavat, minkä ryhmän tulokset näkyvät tuloksessa. Se palauttaa vain ne arvot ryhmistä lopullisessa tuloksessa, joka täyttää tietyt ehdot. Voimme myös käyttää WHERE- ja HAVING-lauseita yhdessä valinnan aikana. Tässä tapauksessa WHERE-lause suodattaa ensin yksittäiset rivit, sitten rivit ryhmitellään, suorittaa aggregaattilaskelmia ja lopulta HAVING-lause suodattaa ryhmät.

Tämä lauseke asettaa ehtoja GROUP BY -lausekkeen luomille ryhmille. Se toimii kuten WHERE-lause, kun SQL-käsky ei käytä GROUP BY -avainsanaa. Voimme käyttää aggregaatti (ryhmä) -funktioita, kuten SUM , MIN, MAX, AVG ja KREIVI vain kahdella lausekkeella: SELECT ja HAVING.

Seuraava syntaksi havainnollistaa HAVING-lauseen käyttöä:

 SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition; 

Otetaan esimerkki tämän lausekkeen ymmärtämiseksi. Tässä tarkastelemme samaa taulukkoa työntekijät esittelyä varten.

Jos haluamme saada kokonaistyötunnit jokaiselle työntekijälle, jonka työaika on yli 6 tuntia , voimme käyttää lausetta seuraavasti:

 mysql&gt; SELECT name, SUM(working_hour) AS &apos;Total working hours&apos; FROM employees GROUP BY name HAVING SUM(working_hour) &gt; 6; 

Saamme alla olevan tuotoksen, josta näemme jokaisen työntekijän kokonaistyötunnit:

WHERE vs HAVING

Tärkeimmät erot WHERE- ja HAVING-lausekkeen välillä

Seuraavat kohdat selittävät tärkeimmät erot tietokannan ja skeeman välillä:

  • WHERE-lause suodattaa yksittäisiä rivejä, kun taas HAVING-lause suodattaa ryhmiä yhden rivin sijaan.
  • Emme voi käyttää WHERE-lausetta koostefunktioiden kanssa, koska se toimii yksittäisten rivien suodattamiseen. Sitä vastoin HAVING voi toimia koontifunktioiden kanssa, koska sitä käytetään ryhmien suodattamiseen.
  • Rivitoimintoja käsittelee WHERE-lause, kun taas HAVING-lause käsittelee sarakeoperaatioita yhteenvetoriveihin tai ryhmiin.
  • WHERE tulee ennen GROUP BY:tä, mikä tarkoittaa, että WHERE-lause suodattaa rivejä ennen aggregaattilaskelmien suorittamista. HAVING tulee sanan GROUP BY jälkeen, mikä tarkoittaa, että HAVING-lause suodattaa rivit aggregaattilaskelmien suorittamisen jälkeen. Näin ollen HAVING on tehokkuuden kannalta hitaampi kuin WHERE, ja sitä tulisi välttää aina kun mahdollista.
  • Voimme yhdistää WHERE- ja HAVING-lauseet yhdessä SELECT-kyselyssä. Tässä tapauksessa WHERE-lausetta käytetään ensin yksittäisten rivien suodattamiseen. Sitten rivit ryhmitellään, suoritetaan aggregaattilaskelmia ja lopuksi HAVING-lausetta käytetään ryhmien suodattamiseen.
  • WHERE-lause hakee halutut tiedot määritetyn ehdon perusteella. Toisaalta HAVING-lause hakee ensin kokonaiset tiedot ja sitten erottelu suoritetaan määritetyn ehdon perusteella.
  • Ilman SELECT-lausetta emme voi käyttää HAVING-lausetta. Sitä vastoin voimme käyttää WHERE-komentoa SELECT-, UPDATE- ja DELETE-käskyjen kanssa.
  • WHERE-lause on esisuodatin, kun taas HAVING-lause on jälkisuodatin.

WHERE vs. HAVING -vertailukaavio

Seuraava vertailukaavio selittää niiden tärkeimmät erot nopeasti:

Vertailuperuste WHERE-lauseke HAVING lauseke
Määritelmä Sitä käytetään yksittäisten rivien suodattamiseen. Sitä käytetään ryhmien suodattamiseen.
Perus Se toteutetaan rivioperaatioissa. Se toteutetaan sarakeoperaatioissa.
Tietojen nouto WHERE-lause hakee tietyt tiedot tietyiltä riveiltä määritetyn ehdon perusteella HAVING-lause hakee ensin täydelliset tiedot. Sitten se erottaa ne tietyn ehdon mukaan.
Aggregaattifunktiot WHERE-lause ei salli työskentelyä aggregaattifunktioiden kanssa. HAVING-lause voi toimia aggregaattifunktioiden kanssa.
Toimi kuten WHERE-lause toimii esisuodattimena. HAVING-lause toimii jälkisuodattimena.
Käytetty kanssa Voimme käyttää WHERE-lausetta SELECT-, UPDATE- ja DELETE-käskyjen kanssa. HAVING-lausetta voidaan käyttää vain SELECT-käskyn kanssa.
GROUP BY GROUP BY -lause tulee WHERE-lauseen jälkeen. GROUP BY -lause tulee ennen HAVING-lausetta.

Johtopäätös

Tässä artikkelissa olemme tehneet vertailun WHERE- ja HAVING-lausekkeiden välillä. Tässä päätämme, että molemmat lausekkeet toimivat samalla tavalla tietojen suodatuksessa, paitsi että jokin lisäominaisuus tekee HAVING-lauseesta suositumman. Voimme työskennellä tehokkaasti HAVING-lausekkeen aggregaattifunktioiden kanssa, kun taas WHERE ei salli koontifunktioita.

Tietokoneverkot