Junior
Was ist der Unterschied zwischen den Konstruktionen WHERE und HAVING in SQL?
sobes.tech KI
Antwort von AI
WHERE filtert Zeilen vor der Gruppierung (GROUP BY), beeinflusst, welche Zeilen an Aggregatfunktionen teilnehmen. HAVING filtert Gruppen nach der Gruppierung, basierend auf den Ergebnissen der Aggregatfunktionen.
| Merkmal | WHERE | HAVING |
|---|---|---|
| Anwendung | Auf einzelne Zeilen | Auf Gruppen von Zeilen |
| Verarbeitungszeit | Vor GROUP BY | Nach GROUP BY |
| Verwendung | Mit Feldern aus der Tabelle, aber ohne Aggregatfunktionen | Mit Ergebnissen von Aggregatfunktionen oder Feldern aus GROUP BY |
Beispiel für WHERE:
SELECT produkt_name, preis
FROM produkte
WHERE category_id = 1; -- Filtert Zeilen **vor** der Gruppierung (falls sie stattgefunden hätte)
Beispiel für HAVING:
SELECT category_id, COUNT(*) AS gesamt_produkte
FROM produkte
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtert Gruppen **nach** der Zählung der Gesamtzahl der Produkte
Beispiel für gemeinsame Verwendung:
SELECT category_id, AVG(preis) AS durchschnittspreis
FROM produkte
WHERE lagerbestand > 0 -- Filtert nur Produkte auf Lager **vor** der Gruppierung
GROUP BY category_id
HAVING AVG(preis) < 100; -- Filtert Gruppen mit einem durchschnittlichen Preis unter 100 **nach** der Gruppierung und Berechnung des Durchschnitts