Heim >Datenbank >MySQL-Tutorial >Spielt die Join-Reihenfolge bei SQL-Abfragen eine Rolle, insbesondere bei Outer Joins?

Spielt die Join-Reihenfolge bei SQL-Abfragen eine Rolle, insbesondere bei Outer Joins?

Susan Sarandon
Susan SarandonOriginal
2025-01-17 17:37:08992Durchsuche

Does Join Order Matter in SQL Queries, Especially with 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!

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