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
Freigeben: 2025-01-17 17:37:08
Original
1047 Leute haben es durchsucht

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:

-- A (内连接)
SELECT *
FROM a INNER JOIN b ON <条件>
INNER JOIN c ON <条件>;

-- B (内连接)
SELECT *
FROM a INNER JOIN c ON <条件>
INNER JOIN b ON <条件>;
Nach dem Login kopieren

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:

a LEFT JOIN b ON b.ab_id = a.ab_id
Nach dem Login kopieren

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:

b LEFT JOIN a ON a.ab_id = b.ab_id
Nach dem Login kopieren

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:

a LEFT JOIN b ON b.ab_id = a.ab_id
LEFT JOIN c ON c.ac_id = a.ac_id
Nach dem Login kopieren

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!

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