WHERE- og HAVING-sætningerne diskuteres i dybden i denne artikel. De bruges også til at filtrere poster i SQL-forespørgsler. Forskellen mellem WHERE og HAVING klausulen er det mest almindelige spørgsmål, der stilles under en samtale. Den største forskel mellem dem er, at WHERE-udtrykket bruges til at angive en betingelse for filtrering af poster, før der foretages grupperinger, mens HAVING-udtrykket bruges til at angive en betingelse for filtrering af værdier fra en gruppe. Før vi foretager sammenligningen, vil vi først kende disse SQL klausuler.
HVOR klausul
WHERE-sætningen i MySQL bruges sammen med SELECT, INDSÆT , OPDATERING , og SLET forespørgsler for at filtrere data fra tabellen eller relationen. Den beskriver en specifik tilstand, når der hentes poster fra en enkelt tabel eller flere tabeller ved hjælp af JOIN-sætningen. Hvis den angivne betingelse er opfyldt, returnerer den den bestemte værdi fra tabellen. WHERE-udtrykket placerer betingelser på de valgte kolonner.
WHERE-sætningen i MySQL kan også implementere de logiske forbindelser OG , ELLER og IKKE. De er kendt som den boolske tilstand, der skal være rigtigt for at hente dataene. De logiske konnektivitetsudtryk bruger sammenligningsoperatorerne som deres operander kan lide<, ,>=, = og . Sammenligningsoperatorerne bruges normalt til at sammenligne strenge og aritmetiske udtryk.,>
Følgende syntaks illustrerer brugen af WHERE-sætningen:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Lad os tage et eksempel for at forstå denne klausul. Antag, at vi har en tabel ved navn medarbejdere der indeholder følgende data:
Hvis vi vil for at få den medarbejderdetaljer, hvis arbejdstid er større end 9 , så kan vi bruge udsagnet som følger:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Vi får nedenstående output, hvor vi kan se medarbejderdetaljer, hvis arbejdstid er større end 9:
Hvis vi bruger ovenstående forespørgsel med GRUPPE EFTER klausul , får vi det anderledes resultat:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Her er outputtet:
HAVE Klausul
HAVING-klausul i MySQL bruges sammen med GROUP BY klausul gør det muligt for os at angive betingelser, der filtrerer, hvilke grupperesultater der vises i resultatet. Det returnerer kun de værdier fra grupperne i det endelige resultat, der opfylder visse betingelser. Vi kan også bruge WHERE- og HAVING-sætningen sammen under udvælgelsen. I dette tilfælde filtrerer WHERE-sætning først de individuelle rækker, derefter grupperes rækker, udfører aggregerede beregninger, og til sidst filtrerer HAVING-sætningen grupperne.
Denne sætning sætter betingelser for grupper, der er oprettet af GROUP BY-sætningen. Det opfører sig som WHERE-sætningen, når SQL-sætningen ikke bruger søgeordet GROUP BY. Vi kan bruge de aggregerede (gruppe) funktioner såsom SUM , MIN, MAX, AVG og TÆLLE kun med to klausuler: SELECT og HAVING.
Følgende syntaks illustrerer brugen af HAVING-sætningen:
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Lad os tage et eksempel for at forstå denne klausul. Her overvejer vi den samme tabel medarbejdere til demonstration.
Hvis vi vil at få den samlede arbejdstid for hver medarbejder, hvis arbejdstid er større end 6 timer , så kan vi bruge udsagnet som følger:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Vi får nedenstående output, hvor vi kan se hver medarbejders samlede arbejdstid:
Nøgleforskelle mellem WHERE og HAVING-klausul
Følgende punkter forklarer de vigtigste forskelle mellem database og skema:
- WHERE-udtrykket filtrerer individuelle rækker, hvorimod HAVING-udtrykket filtrerer grupper i stedet for én række ad gangen.
- Vi kan ikke bruge WHERE-udtrykket med aggregerede funktioner, fordi det virker til at filtrere individuelle rækker. I modsætning hertil kan HAVING arbejde med aggregerede funktioner, fordi det bruges til at filtrere grupper.
- Rækkeoperationer håndteres af WHERE-udtrykket, mens HAVING-udtrykket håndterer kolonneoperationer til opsummerede rækker eller grupper.
- WHERE kommer før GROUP BY, hvilket betyder WHERE-sætningsfiltreringsrækker, før der udføres aggregerede beregninger. HAVING kommer efter GROUP BY, hvilket betyder, at HAVING-sætningen filtrerer rækker efter at have udført aggregerede beregninger. Følgelig er HAVING langsommere end WHERE med hensyn til effektivitet og bør undgås hvor det er muligt.
- Vi kan kombinere WHERE- og HAVING-sætningen sammen i en SELECT-forespørgsel. I dette tilfælde bruges WHERE-udtrykket først til at filtrere individuelle rækker. Rækkerne grupperes derefter, udfører aggregerede beregninger, og til sidst bruges HAVING-sætningen til at filtrere grupperne.
- WHERE-sætningen henter de ønskede data baseret på den angivne betingelse. På den anden side henter HAVING-sætningen først hele data, og derefter udføres adskillelse baseret på den angivne betingelse.
- Uden en SELECT-sætning kan vi ikke bruge HAVING-sætningen. Omvendt kan vi bruge en WHERE med SELECT-, UPDATE- og DELETE-sætninger.
- WHERE-sætning er et præ-filter, hvorimod HAVING-sætning er et post-filter.
HVOR vs. HAVING Sammenligningsdiagram
Følgende sammenligningsdiagram forklarer deres vigtigste forskelle på en hurtig måde:
Sammenligningsgrundlag | HVOR klausul | HAVE Klausul |
---|---|---|
Definition | Det bruges til at udføre filtrering på individuelle rækker. | Det bruges til at udføre filtrering på grupper. |
Grundlæggende | Det er implementeret i rækkeoperationer. | Det er implementeret i kolonneoperationer. |
Datahentning | WHERE-udtrykket henter de specifikke data fra bestemte rækker baseret på den angivne betingelse | HAVING-sætningen henter først de komplette data. Det adskiller dem derefter i henhold til den givne tilstand. |
Samlede funktioner | WHERE-sætningen tillader ikke at arbejde med aggregerede funktioner. | HAVING-sætningen kan arbejde med aggregerede funktioner. |
Handle som | WHERE-sætningen fungerer som et forfilter. | HAVING-sætningen fungerer som et efterfilter. |
Brugt med | Vi kan bruge WHERE-sætningen med SELECT-, UPDATE- og DELETE-sætningerne. | HAVING-sætningen kan kun bruges med SELECT-sætningen. |
GRUPPE EFTER | GROUP BY-sætningen kommer efter WHERE-sætningen. | GROUP BY-sætningen kommer før HAVING-sætningen. |
Konklusion
I denne artikel har vi lavet en sammenligning mellem WHERE- og HAVING-sætningen. Her konkluderer vi, at begge klausuler fungerer på samme måde ved filtrering af data, bortset fra at nogle ekstra funktioner gør HAVING-sætningen mere populær. Vi kan effektivt arbejde med aggregerede funktioner i HAVING-klausulen, mens WHERE ikke tillader aggregerede funktioner.