`Hvor 'og' har 'klausuler i SQL tjener forskellige formål, skønt de begge filtrerer rækker baseret på forhold. Her er en sammenbrud:
hvor klausul
* Formål: Filtre rækker før Eventuelle aggregeringsoperationer (som `sum ',` avg', `tælling 'osv.).
* gælder for: Individuelle rækker.
* Betingelser: Involver typisk sammenligninger og logiske operatører, der fungerer på individuelle kolonner i tabellen.
* Eksempel:
`` `sql
Vælg * fra kunder, hvor land ='USA';
`` `
Denne forespørgsel henter alle kunder fra 'Kunder' -tabellen, hvor 'landet' -kolonne er lig med 'USA'.
har klausul
* Formål: Filtre rækker efter Aggregationsoperationer.
* gælder for: Resultaterne af aggregeringen (gruppe af).
* Betingelser: Inddrag typisk sammenligninger af aggregerede værdier ved hjælp af samlede funktioner (f.eks. `Sum (pris)`, `AVG (alder)`, `Count (*)`) i kombination med logiske operatører.
* Eksempel:
`` `sql
Vælg City, AVG (alder) som gennemsnitlig_age
Fra kunder
Gruppe efter by
Har gennemsnitlig_age> 30;
`` `
Denne forespørgsel grupperer kunder efter 'by' og beregner gennemsnitsalderen for hver by. Derefter filtrerer det resultaterne til kun at vise byer, hvor gennemsnitsalderen er større end 30.
Nøgleforskelle i et nøddeskal:
* timing: `Hvor 'filtre før aggregering,' har 'filtre efter.
* Omfang: `Hvor 'fungerer på individuelle rækker,' at have 'fungerer på samlede resultater.
* Betingelser: `Hvor 'bruger betingelser på individuelle kolonner, bruger' at 'anvende betingelser på aggregerede værdier.
Hvornår skal man bruge hver klausul:
* Brug `hvor ', når du vil filtrere data baseret på individuelle rækkeværdier, inden der opstår nogen aggregering.
* Brug `have ', når du vil filtrere aggregerede resultater (som grupperede data) baseret på betingelser, der involverer aggregerede værdier.
Bemærk: Du kan bruge både 'hvor' og 'have' klausuler i den samme forespørgsel, men 'hvor' anvendes først til at filtrere de rækker, der bruges til aggregering, og derefter 'have' bruges til at filtrere de aggregerede resultater.