Heim > Datenbank > MySQL-Tutorial > LEFT JOIN in SQL: Was ist der Hauptunterschied zwischen den Klauseln „ON' und „WHERE'?

LEFT JOIN in SQL: Was ist der Hauptunterschied zwischen den Klauseln „ON' und „WHERE'?

Barbara Streisand
Freigeben: 2025-01-03 00:18:40
Original
631 Leute haben es durchsucht

LEFT JOIN in SQL:  What's the Key Difference Between `ON` and `WHERE` Clauses?

LEFT JOIN mit Bedingungen: Wo ist der Unterschied zwischen ON und WHERE?

In SQL Server kombiniert LEFT JOIN Zeilen aus zwei Tabellen basierend auf eine angegebene Join-Bedingung. Während die ON-Klausel die Join-Bedingung innerhalb der LEFT JOIN-Anweisung definiert, filtert die WHERE-Klausel Zeilen nach der Join-Operation. Diese subtile Unterscheidung kann zu unerwarteten Ergebnissen führen, wenn sie nicht richtig verstanden wird.

Bedenken Sie die folgende Abfrage:

SELECT t1.f2
FROM   t1
LEFT JOIN t2
ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something
Nach dem Login kopieren

Überraschenderweise liefert diese Abfrage nicht die gleichen Ergebnisse wie die folgende:

SELECT t1.f2
FROM   t1
LEFT JOIN t2
ON t1.f1 = t2.f1 AND cond2
WHERE  t2.f3 > something
Nach dem Login kopieren

Die Erklärung

Die ON-Klausel spielt eine entscheidende Rolle bei der Bestimmung, welche Zeilen nehmen am Join teil. Die in ON angegebene Bedingung muss wahr sein, damit Zeilen abgeglichen und in das Join-Ergebnis einbezogen werden. Im Gegensatz dazu filtert die WHERE-Klausel Zeilen, die bereits verbunden wurden.

In der ersten Abfrage ist die Bedingung t2.f3 > etwas ist Teil der ON-Klausel. Folglich werden nur Zeilen in den Join einbezogen, in denen t2.f3 größer als irgendetwas ist. Das bedeutet, dass alle übereinstimmenden Zeilen, in denen t2.f3 nicht größer als etwas ist, vom Ergebnis ausgeschlossen werden.

In der zweiten Abfrage wird die Bedingung t2.f3 > etwas ist Teil der WHERE-Klausel. Diese Klausel wird ausgewertet, nachdem der Join durchgeführt wurde. Daher sind alle Zeilen, die die ON-Klauselbedingung (t1.f1 = t2.f1 und cond2) erfüllen, Teil des Join-Ergebnisses. Die WHERE-Klausel filtert dann diese Zeilen und behält nur diejenigen bei, in denen t2.f3 größer als etwas ist.

Beispiel

Um dieses Konzept zu veranschaulichen, betrachten Sie eine Kandidatentabelle ( Kandidaten) und eine Abstimmungstabelle (Stimmen). Wenn wir Kandidaten finden möchten, die Stimmen erhalten haben, können wir einen LEFT JOIN verwenden:

SELECT  *
FROM    candidates c
LEFT JOIN    
        votes v
ON      c.name = v.voted_for
Nach dem Login kopieren

Diese Abfrage gibt alle Kandidaten zurück, auch diejenigen, die keine Stimmen erhalten haben. Wenn wir die Bedingung in die WHERE-Klausel verschieben:

SELECT  *
FROM    candidates c
LEFT JOIN    
        votes v
ON      c.name = v.voted_for
WHERE   v.voted_for IS NOT NULL
Nach dem Login kopieren

Die Ergebnisse umfassen jetzt nur Kandidaten, die mindestens eine Stimme erhalten haben.

Fazit

Das Verständnis des Unterschieds zwischen ON- und WHERE-Klauseln in einem LEFT JOIN ist für die effektive Bearbeitung von Daten von entscheidender Bedeutung. Durch die sorgfältige Platzierung von Bedingungen in den entsprechenden Klauseln können Sie sicherstellen, dass Ihre Abfragen die gewünschten Ergebnisse liefern.

Das obige ist der detaillierte Inhalt vonLEFT JOIN in SQL: Was ist der Hauptunterschied zwischen den Klauseln „ON' und „WHERE'?. 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