logo

Forskjellen mellom WHERE og HAVING

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 kontra HA

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:

HVOR kontra HA

Hvis vi vil for å få ansattdetaljene hvis arbeidstid er større enn 9 , så kan vi bruke setningen som følger:

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9; 

Vi vil få utdataene nedenfor der vi kan se ansattdetaljer hvis arbeidstid er større enn 9:

HVOR kontra HA

Hvis vi bruker søket ovenfor med GRUPPE AV klausul , vil vi få det forskjellige resultatet:

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

Her er utgangen:

HVOR kontra HA

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

Vi vil få utgangen nedenfor der vi kan se hver ansatts totale arbeidstid:

HVOR kontra HA

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.