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-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:
Jos haluamme saada tiedot työntekijästä, jonka työaika on yli 9 , voimme käyttää lausetta seuraavasti:
10 ml oz
mysql> SELECT * FROM employees WHERE working_hour > 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
Jos käytämme yllä olevaa kyselyä GROUP BY lauseke, saamme erilaisen tuloksen:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Tässä on tulos:
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> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Saamme alla olevan tuotoksen, josta näemme jokaisen työntekijän kokonaistyötunnit:
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