Heim >Datenbank >MySQL-Tutorial >Spielt die Join-Reihenfolge bei SQL-Abfragen eine Rolle, insbesondere bei Outer Joins?
SQL JOIN-Reihenfolge: Ist das wichtig?
In SQL wirkt sich die Reihenfolge der JOIN-Vorgänge auf die Abfrageergebnisse aus, insbesondere bei Verwendung von Outer-Joins.
INNER JOIN
Bei inneren Verknüpfungen stimmt eine Zeile in Tabelle A basierend auf einer bestimmten Bedingung genau mit einer Zeile in Tabelle B überein, und die Reihenfolge der Verknüpfungen hat keinen Einfluss auf die Ergebnisse. Dies liegt daran, dass innere Verknüpfungen sowohl kommutativ als auch assoziativ sind. Daher führen die unten gezeigten Abfragen A und B zu denselben Ergebnissen:
<code class="language-sql">-- A (内连接) SELECT * FROM a INNER JOIN b ON <条件> INNER JOIN c ON <条件>; -- B (内连接) SELECT * FROM a INNER JOIN c ON <条件> INNER JOIN b ON <条件>;</code>
OUTER JOIN
Bei äußeren Verknüpfungen (LINKS, RECHTS oder VOLLSTÄNDIG) ist die Reihenfolge der Verknüpfungen wichtig. Im Gegensatz zu Inner-Joins sind Outer-Joins weder austauschbar noch kombinierbar.
Kommutativgesetz
Kommutativität bedeutet, dass a LEFT JOIN b
dasselbe ist wie b LEFT JOIN a
. Dies gilt jedoch nicht für Outer-Joins. Zum Beispiel die folgende Abfrage:
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id</code>
Gibt alle Zeilen in Tabelle a und die entsprechenden Zeilen in Tabelle b zurück, oder NULL, wenn es in Tabelle b keine Übereinstimmung gibt. Gegenfrage:
<code class="language-sql">b LEFT JOIN a ON a.ab_id = b.ab_id</code>
Gibt alle Zeilen in Tabelle b und die entsprechenden Zeilen in Tabelle a zurück, oder NULL, wenn es in Tabelle a keine Übereinstimmung gibt. Wenn Tabelle a und Tabelle b eine unterschiedliche Anzahl von Zeilen haben, führen die beiden Abfragen zu unterschiedlichen Ergebnissen.
Assoziativrecht
Das Assoziativgesetz von bedeutet, dass (a LEFT JOIN b) LEFT JOIN c
äquivalent zu a LEFT JOIN (b LEFT JOIN c)
ist. Dies gilt jedoch auch nicht für Outer-Joins. Betrachten Sie die folgende äquivalente Abfrage:
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.ac_id = a.ac_id</code>
Wenn die Bedingung c.ac_id = a.ac_id
einen NULL-Vergleich enthält, gilt das Assoziativitätsgesetz möglicherweise nicht. Mit anderen Worten: Wenn NULL-Werte an der Join-Bedingung beteiligt sind, wirkt sich die Reihenfolge der Joins auf das Ergebnis aus.
Das obige ist der detaillierte Inhalt vonSpielt die Join-Reihenfolge bei SQL-Abfragen eine Rolle, insbesondere bei Outer Joins?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!