WHERE og HAVING-klausulene diskuteres i dybden i denne artikkelen. De brukes også til å filtrere poster i SQL-spørringer. Forskjellen mellom WHERE- og HAVING-klausulen er det vanligste spørsmålet som stilles under en intervju. Hovedforskjellen mellom dem er at WHERE-leddet brukes til å spesifisere en betingelse for filtrering av poster før det lages grupperinger, mens HAVING-leddet brukes til å spesifisere en betingelse for filtrering av verdier fra en gruppe. Før vi sammenligner, vil vi først vite disse SQL klausuler.
HVOR klausul
WHERE-leddet i MySQL brukes med SELECT, SETT INN , OPPDATER , og SLETT spørringer for å filtrere data fra tabellen eller relasjonen. Den beskriver en spesifikk tilstand når du henter poster fra en enkelt tabell eller flere tabeller ved å bruke JOIN-leddet. Hvis den angitte betingelsen er oppfylt, returnerer den den spesielle verdien fra tabellen. WHERE-leddet plasserer betingelser på de valgte kolonnene.
WHERE-klausulen i MySQL kan også implementere de logiske forbindelsene OG , ELLER og IKKE. De er kjent som den boolske tilstanden som må være ekte for å hente dataene. De logiske koblingsuttrykkene bruker sammenligningsoperatorene som deres operander liker<, ,>=, =, og . Sammenligningsoperatorene brukes vanligvis til å sammenligne strenger og aritmetiske uttrykk.,>
Følgende syntaks illustrerer bruken av WHERE-leddet:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
La oss ta et eksempel for å forstå denne klausulen. Anta at vi har en tabell som heter ansatte som inneholder følgende data:
Hvis vi vil for å få ansattdetaljene hvis arbeidstid er større enn 9 , så kan vi bruke setningen som følger:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Vi vil få utdataene nedenfor der vi kan se ansattdetaljer hvis arbeidstid er større enn 9:
Hvis vi bruker søket ovenfor med GRUPPE AV klausul , vil vi få det forskjellige resultatet:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Her er utgangen:
HA Klausul
HAVING-klausul i MySQL brukes sammen med GROUP BY klausulen lar oss spesifisere betingelser som filtrerer hvilke grupperesultater som vises i resultatet. Den returnerer bare de verdiene fra gruppene i sluttresultatet som oppfyller visse betingelser. Vi kan også bruke WHERE- og HAVING-klausulen sammen under valg. I dette tilfellet filtrerer WHERE-leddet først de individuelle radene, deretter grupperes radene, utfører aggregerte beregninger, og til slutt filtrerer HAVING-leddet gruppene.
Denne klausulen setter betingelser for grupper opprettet av GROUP BY-klausulen. Den oppfører seg som WHERE-leddet når SQL-setningen ikke bruker nøkkelordet GROUP BY. Vi kan bruke aggregerte (gruppe) funksjoner som SUM , MIN, MAX, AVG og TELLE bare med to klausuler: SELECT og HAVING.
Følgende syntaks illustrerer bruken av HAVING-leddet:
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
La oss ta et eksempel for å forstå denne klausulen. Her vurderer vi samme tabell ansatte for demonstrasjon.
Hvis vi vil å få den totale arbeidstiden for hver arbeidstaker hvis arbeidstid er større enn 6 timer , så kan vi bruke setningen som følger:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Vi vil få utgangen nedenfor der vi kan se hver ansatts totale arbeidstid:
Viktige forskjeller mellom WHERE og HAVING-klausul
Følgende punkter forklarer hovedforskjellene mellom database og skjema:
- WHERE-leddet filtrerer individuelle rader, mens HAVING-leddet filtrerer grupper i stedet for én rad om gangen.
- Vi kan ikke bruke WHERE-leddet med aggregerte funksjoner fordi det fungerer for filtrering av individuelle rader. I kontrast kan HAVING fungere med aggregerte funksjoner fordi det brukes til å filtrere grupper.
- Radoperasjoner håndteres av WHERE-leddet, mens HAVING-leddet håndterer kolonneoperasjoner til oppsummerte rader eller grupper.
- WHERE kommer før GROUP BY, som betyr WHERE-klausulfilterrader før du utfører aggregerte beregninger. HAVING kommer etter GROUP BY, som betyr at HAVING-leddet filtrerer rader etter å ha utført aggregerte beregninger. Følgelig er HAVING tregere enn WHERE når det gjelder effektivitet og bør unngås der det er mulig.
- Vi kan kombinere WHERE- og HAVING-leddet sammen i en SELECT-spørring. I dette tilfellet brukes WHERE-leddet først til å filtrere individuelle rader. Radene blir deretter gruppert, utfører aggregerte beregninger, og til slutt brukes HAVING-leddet til å filtrere gruppene.
- WHERE-leddet henter de ønskede dataene basert på den angitte betingelsen. På den annen side henter HAVING-klausulen først hele data, og deretter gjøres separasjon basert på den angitte betingelsen.
- Uten en SELECT-setning kan vi ikke bruke HAVING-leddet. Omvendt kan vi bruke en WHERE med SELECT-, UPDATE- og DELETE-setninger.
- WHERE-leddet er et pre-filter, mens HAVING-leddet er et postfilter.
HVOR vs. HA Sammenligningsdiagram
Følgende sammenligningsdiagram forklarer hovedforskjellene deres på en rask måte:
Sammenligningsgrunnlag | HVOR klausul | HA Klausul |
---|---|---|
Definisjon | Den brukes til å utføre filtrering på individuelle rader. | Den brukes til å utføre filtrering på grupper. |
Grunnleggende | Det er implementert i radoperasjoner. | Det er implementert i kolonneoperasjoner. |
Datahenting | WHERE-leddet henter de spesifikke dataene fra bestemte rader basert på den angitte tilstanden | HAVING-klausulen henter først de fullstendige dataene. Den skiller dem deretter i henhold til den gitte tilstanden. |
Aggregerte funksjoner | WHERE-leddet tillater ikke å jobbe med aggregerte funksjoner. | HAVING-leddet kan fungere med aggregerte funksjoner. |
Oppfør deg som | WHERE-klausulen fungerer som et forfilter. | HAVING-klausulen fungerer som et etterfilter. |
Brukes med | Vi kan bruke WHERE-leddet med SELECT-, UPDATE- og DELETE-setningene. | HAVING-leddet kan bare brukes med SELECT-setningen. |
GRUPPE AV | GROUP BY-leddet kommer etter WHERE-leddet. | GROUP BY-klausulen kommer før HAVING-klausulen. |
Konklusjon
I denne artikkelen har vi gjort en sammenligning mellom WHERE- og HAVING-klausulen. Her konkluderer vi med at begge klausulene fungerer på samme måte når det gjelder å filtrere dataene, bortsett fra at noen tilleggsfunksjoner gjør HAVING-klausulen mer populær. Vi kan effektivt arbeide med aggregerte funksjoner i HAVING-klausulen mens WHERE ikke tillater aggregerte funksjoner.