Heim > Datenbank > MySQL-Tutorial > SQL HAVING vs. WHERE: Wann werden die einzelnen Klauseln zur Datenfilterung verwendet?

SQL HAVING vs. WHERE: Wann werden die einzelnen Klauseln zur Datenfilterung verwendet?

Linda Hamilton
Freigeben: 2025-01-21 09:56:09
Original
947 Leute haben es durchsucht

SQL HAVING vs. WHERE: When to Use Each Clause for Data Filtering?

SQL-Datenfilterung: Unterschiede zwischen WHERE- und HAVING-Klauseln

Die HAVING- und WHERE-Klauseln in SQL werden beide zum Filtern von Daten verwendet, ihre Funktionen sind jedoch unterschiedlich. Die WHERE-Klausel funktioniert für einzelne Zeilen, während die HAVING-Klausel für aggregierte Ergebnisse funktioniert.

Differenzbeispiel

Angenommen, wir haben zwei Tabellen: Lecturers und Lecturers_Specialization und möchten die Dozenten mit den meisten Fachgebieten finden.

Die erste Abfrage mit der WHERE-Klausel liefert nicht die erwarteten Ergebnisse:

<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>
Nach dem Login kopieren

Das liegt daran, dass die WHERE-Klausel eine einzelne Zeile filtert und der COUNT(S.Expertise) >= ALL-Vergleich nicht auf eine einzelne Zeile angewendet werden kann.

Die richtige Abfrage verwendet die HAVING-Klausel:

<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>
Nach dem Login kopieren
Die

HAVING-Klausel wirkt sich auf die aggregierten Ergebnisse aus, um sicherzustellen, dass der Vergleich auf die Anzahl der Fachgebiete jedes Dozenten angewendet wird.

Faustregeln und Optimierung

Im Allgemeinen wird die WHERE-Klausel vor der GROUP BY-Klausel verwendet, um einzelne Zeilen zu filtern. Die HAVING-Klausel wird nach der GROUP BY-Klausel verwendet, um aggregierte Ergebnisse zu filtern.

Darüber hinaus können Abfragen mithilfe der ANSI JOIN-Syntax anstelle der L, S θ-Join-Syntax optimiert 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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSQL HAVING vs. WHERE: Wann werden die einzelnen Klauseln zur Datenfilterung verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage