Unterschied zwischen WHERE und HAVING in SQL
Sowohl WHERE- als auch HAVING-Klauseln werden zum Filtern von Daten in SQL-Abfragen verwendet, sie dienen jedoch unterschiedlichen Zwecken und werden in unterschiedlichen Phasen der Abfrageausführung angewendet. Hier ein ausführlicher Vergleich:
1. Zweck
-
WHERE-Klausel:
- Filtert Zeilen, bevor eine Gruppierung durchgeführt wird.
- Wird verwendet, um Bedingungen für einzelne Zeilen anzugeben.
-
HAVING-Klausel:
- Filtert gruppierte Daten, nachdem die GROUP BY-Klausel angewendet wurde.
- Wird normalerweise mit Aggregatfunktionen wie SUM(), COUNT(), AVG() usw. verwendet.
2. Bewerbung
-
WO:
- Kann nicht mit Aggregatfunktionen (z. B. SUM, COUNT) verwendet werden.
- Beispiel:
SELECT * FROM employees WHERE salary > 50000;
Nach dem Login kopieren
Nach dem Login kopieren
- Dadurch werden Mitarbeiter mit einem Gehalt von mehr als 50.000 herausgefiltert.
-
HABEN:
- Wird speziell zum Filtern von Gruppen verwendet, die von GROUP BY erstellt wurden.
- Kann Aggregatfunktionen für Bedingungen verwenden.
- Beispiel:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
Nach dem Login kopieren
Nach dem Login kopieren
- Dadurch werden Abteilungen herausgefiltert, in denen das Durchschnittsgehalt 60.000 übersteigt.
3. Ausführungsreihenfolge
-
WO:
- Wird früh in der Abfrage angewendet, bevor Zeilen gruppiert werden.
- Beeinflusst, welche Zeilen in die Gruppierung einbezogen werden.
-
HABEN:
- Wird angewendet, nachdem GROUP BY Gruppen erstellt hat.
- Filtert das aggregierte Ergebnis der Gruppen.
4. Hauptunterschiede
Aspekt |
WHERE-Klausel |
HAVING-Klausel |
Aspect |
WHERE Clause |
HAVING Clause |
Purpose |
Filters rows before grouping. |
Filters aggregated groups. |
Use with Aggregates |
Cannot use aggregate functions. |
Can use aggregate functions. |
Execution Order |
Applied before GROUP BY. |
Applied after GROUP BY. |
Scope |
Operates on individual rows. |
Operates on grouped data. |
Zweck |
Filtert Zeilen vor dem Gruppieren. |
Filtert aggregierte Gruppen. |
Verwendung mit Aggregaten |
Aggregatfunktionen können nicht verwendet werden. |
Kann Aggregatfunktionen verwenden. |
Ausführungsbefehl |
Wird vor GROUP BY angewendet. |
Wird nach GROUP BY angewendet. |
Geltungsbereich |
Wird auf einzelne Zeilen angewendet. |
Arbeitet mit gruppierten Daten. |
Beispiele
Verwendung von WHERE:
SELECT * FROM employees WHERE salary > 50000;
Nach dem Login kopieren
Nach dem Login kopieren
- Filtert einzelne Zeilen, in denen das Gehalt mehr als 50.000 beträgt.
Verwendung von HAVING:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
Nach dem Login kopieren
Nach dem Login kopieren
- Filtert Abteilungen, in denen die Anzahl der Mitarbeiter 10 überschreitet.
Kombiniertes Beispiel:
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 50000;
Nach dem Login kopieren
-
WHERE: Filtert Zeilen, in denen das Gehalt mehr als 30.000 beträgt.
-
HAVING: Filtert Gruppen, in denen das Durchschnittsgehalt 50.000 übersteigt.
Wann sollte WHERE vs. HAVING verwendet werden?
- Verwenden Sie WHERE zum Filtern von Zeilen basierend auf einfachen Bedingungen (nicht aggregiert).
- Verwenden Sie HAVING zum Filtern von Gruppen nach der Anwendung von GROUP BY oder Aggregatfunktionen.
Fazit
Die WHERE-Klausel konzentriert sich auf das Filtern einzelner Zeilen vor jeder Gruppierung, während sich die HAVING-Klausel mit dem Filtern aggregierter Daten nach der Gruppierung befasst. Das Verständnis dieser Unterscheidungen ist entscheidend für das Schreiben effizienter SQL-Abfragen, die sowohl die Filterung auf Zeilen- als auch auf Gruppenebene verarbeiten.
Hallo, ich bin Abhay Singh Kathayat!
Ich bin ein Full-Stack-Entwickler mit Fachwissen sowohl in Front-End- als auch in Back-End-Technologien. Ich arbeite mit einer Vielzahl von Programmiersprachen und Frameworks, um effiziente, skalierbare und benutzerfreundliche Anwendungen zu erstellen.
Sie können mich gerne unter meiner geschäftlichen E-Mail-Adresse erreichen: kaashshorts28@gmail.com.
Das obige ist der detaillierte Inhalt vonDen Unterschied zwischen WHERE und HAVING in SQL verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!