De 'waar' en 'hebben' clausules in SQL dienen verschillende doeleinden, hoewel ze beide rijen filteren op basis van voorwaarden. Hier is een uitsplitsing:
waar clausule
* Doel: Filters rijen vóór alle aggregatie -bewerkingen (zoals `sum`,` avg`, `count`, etc.).
* is van toepassing op: Individuele rijen.
* voorwaarden: Omvatten meestal vergelijkingen en logische operatoren die op afzonderlijke kolommen in de tabel werken.
* Voorbeeld:
`` `SQL
Selecteer * uit klanten waar country ='usa';
`` `
Deze zoekopdracht haalt alle klanten op uit de 'klanten' -tabel waar de kolom' Country 'gelijk is aan' VS '.
Clausule hebben
* Doel: Filters rijen na aggregatie -operaties.
* is van toepassing op: De resultaten van de aggregatie (groep door).
* voorwaarden: Omvatten meestal vergelijkingen van geaggregeerde waarden met behulp van geaggregeerde functies (bijv. `Sum (prijs)`, `avg (leeftijd)`, `count (*)`) in combinatie met logische operatoren.
* Voorbeeld:
`` `SQL
Selecteer stad, gem (leeftijd) als gemiddelde_age
Van klanten
Groep voor stad
Met gemiddelde_age> 30;
`` `
Deze query groeit klanten per 'stad' en berekent de gemiddelde leeftijd voor elke stad. Vervolgens filtert het de resultaten om alleen steden te tonen waar de gemiddelde leeftijd groter is dan 30.
Belangrijkste verschillen in een notendop:
* timing: `Waar` filters voor aggregatie," filters 'na.
* Scope: 'Waar' werkt op individuele rijen, werkt 'op geaggregeerde resultaten.
* voorwaarden: 'Waar' voorwaarden op individuele kolommen gebruikt, gebruikt 'het hebben' voorwaarden voor geaggregeerde waarden.
Wanneer elke clausule moet worden gebruikt:
* Gebruik `waar` wanneer u gegevens wilt filteren op basis van individuele rijwaarden voordat een aggregatie optreedt.
* Gebruik `hebben 'wanneer u geaggregeerde resultaten (zoals gegroepeerde gegevens) wilt filteren op basis van voorwaarden met geaggregeerde waarden.
Opmerking: U kunt zowel 'waar' als 'clausules in dezelfde query gebruiken, maar' waar 'wordt eerst toegepast om de rijen te filteren die worden gebruikt voor aggregatie, en vervolgens' wordt 'gebruikt om de geaggregeerde resultaten te filteren. |