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;
- 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;
- 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;
- 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;
- Filtert Abteilungen, in denen die Anzahl der Mitarbeiter 10 überschreitet.
Kombiniertes Beispiel:
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 50000;
-
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!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn