"Var" och "med" klausuler i SQL tjänar olika syften, även om de båda filtrerar rader baserat på förhållanden. Här är en uppdelning:
där klausul
* Syfte: Filter rader före Alla aggregeringsoperationer (som "sum", "genomsnitt", "greve", etc.).
* gäller: Individuella rader.
* villkor: Involverar vanligtvis jämförelser och logiska operatörer som arbetar på enskilda kolumner i tabellen.
* Exempel:
`` `SQL
Välj * från kunder där land ='USA';
`` `
Denna fråga hämtar alla kunder från "kunder" -tabellen där "Country" -kolumnen är lika med "USA".
med klausul
* Syfte: Filter rader efter aggregeringsoperationer.
* gäller: Resultaten av aggregeringen (grupp av).
* villkor: Involverar vanligtvis jämförelser av aggregerade värden med användning av aggregerade funktioner (t.ex. `summa (pris)`, `AVG (ålder)`, `räkning (*)`) i kombination med logiska operatörer.
* Exempel:
`` `SQL
Välj stad, genomsnitt (ålder) som medelvärde_age
Från kunder
Grupp efter stad
Med medelvärde_age> 30;
`` `
Denna fråga grupperar kunder efter "stad" och beräknar medelåldern för varje stad. Sedan filtrerar det resultaten för att endast visa städer där medelåldern är större än 30.
Nyckelskillnader i ett nötskal:
* timing: "Var" filter före aggregering, "har" filter efter.
* Omfattning: "Var" fungerar på enskilda rader, "har" arbetar med aggregerade resultat.
* villkor: "Var" använder villkor på enskilda kolumner, "har" använder villkor på aggregerade värden.
När man ska använda varje klausul:
* Använd `var 'när du vill filtrera data baserat på enskilda radvärden innan någon aggregering inträffar.
* Använd `att ha 'när du vill filtrera aggregerade resultat (som grupperade data) baserat på förhållanden som involverar aggregerade värden.
Obs: Du kan använda både "var" och "med" klausuler i samma fråga, men "var" används först för att filtrera raderna som används för aggregering och sedan "har" används för att filtrera de aggregerade resultaten.