`Where` and` har` -klausuler i SQL tjener forskjellige formål, selv om de begge filtrerer rader basert på forhold. Her er et sammenbrudd:
hvor klausul
* Formål: Filtrerer rader før Eventuelle aggregeringsoperasjoner (som `sum`,` avg`, `count`, etc.).
* gjelder for: Individuelle rader.
* forhold: Involverer vanligvis sammenligninger og logiske operatører som opererer på individuelle kolonner i tabellen.
* eksempel:
`` SQL
Velg * fra kunder der land ='USA';
`` `
Denne spørringen henter alle kunder fra 'Kunden' -tabellen der 'Country' -kolonnen tilsvarer 'USA'.
med klausul
* Formål: Filtrerer rader etter aggregeringsoperasjoner.
* gjelder for: Resultatene fra aggregeringen (gruppe av).
* forhold: Involverer vanligvis sammenligninger av aggregerte verdier ved bruk av aggregatfunksjoner (f.eks. `Sum (pris)`, `avg (alder)`, `count (*)`) i kombinasjon med logiske operatører.
* eksempel:
`` SQL
Velg by, AVG (alder) som gjennomsnittlig_age
Fra kunder
Gruppe etter by
Har gjennomsnittlig_age> 30;
`` `
Denne spørringen grupper kunder etter 'by' og beregner gjennomsnittsalderen for hver by. Deretter filtrerer det resultatene for bare å vise byer der gjennomsnittsalderen er større enn 30.
Nøkkelforskjeller i et nøtteskall:
* Timing: `` `` `Filtrere før aggregering,` å ha `filtrere etter.
* Scope: `Where` jobber på individuelle rader,` å ha` jobber med samlede resultater.
* forhold: `Where` bruker forhold på individuelle kolonner,` å ha` bruker forhold på aggregerte verdier.
Når du skal bruke hver klausul:
* Bruk `hvor 'når du vil filtrere data basert på individuelle radverdier før det oppstår noen aggregering.
* Bruk `Å ha` når du vil filtrere aggregerte resultater (som grupperte data) basert på forhold som involverer aggregerte verdier.
Merk: Du kan bruke både `Where` og` å ha `klausuler i samme spørring, men` Where 'brukes først for å filtrere radene som brukes til aggregering, og deretter brukes `å" til å filtrere de aggregerte resultatene.