Heim >Datenbank >MySQL-Tutorial >WHERE vs. HAVING in SQL: Wann sollte ich die einzelnen Klauseln verwenden?
Verstehen der WHERE- und HAVING-Klauseln in SQL-Abfragen
SQL-Entwickler stehen oft vor der Herausforderung, zwischen WHERE- und HAVING-Klauseln zu unterscheiden. Ziel dieses Artikels ist es, ihre unterschiedliche Verwendung in SQL-Abfragen zu verdeutlichen.
Wann ist WO zu verwenden?
Wann HAVING verwenden sollte
Beispiel: Dozent mit den meisten Hauptfächern
Um diesen Unterschied zu veranschaulichen, betrachten Sie die folgende Tabelle:
<code>1. Lecturers (LectID, Fname, Lname, degree) 2. Lecturers_Specialization (LectID, Expertise)</code>
Ziel ist es, den Dozenten mit den meisten Hauptfächern zu finden.
WHERE-Abfrage (Fehler)
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L, Lecturers_Specialization S WHERE L.LectID = S.LectID AND COUNT(S.Expertise) >= ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID);</code>
Diese WHERE-Abfrage funktioniert nicht, da versucht wird, WHERE zum Filtern basierend auf einer Aggregatfunktion (COUNT(S.Expertise)) zu verwenden. Die WHERE-Klausel wird zum Filtern einzelner Zeilen und nicht zum Zusammenfassen von Ergebnissen verwendet.
HAVING-Abfrage (richtig)
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L, Lecturers_Specialization S WHERE L.LectID = S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise) >= ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID);</code>
Diese HAVING-Abfrage ruft erfolgreich die richtigen Ergebnisse ab, da sie Bedingungen für die aggregierten Daten (COUNT(S.Expertise)) nach der GROUP BY-Operation festlegt.
ANSI-Verbindungsversion (empfohlen)
Mithilfe der ANSI-Join-Syntax kann die Abfrage wie folgt umgeschrieben werden:
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L JOIN Lecturers_Specialization S ON L.LectID=S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise)>=ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)</code>
Diese Version eliminiert die WHERE-Klausel für Theta-Join-Bedingungen, was zu effizienteren und standardkonformen Abfragen führt.
Das obige ist der detaillierte Inhalt vonWHERE vs. HAVING in SQL: Wann sollte ich die einzelnen Klauseln verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!