Heim >Datenbank >MySQL-Tutorial >Wie kann man passende Daten tabellenübergreifend effizient abrufen: Inner Join vs. Union?
Vergleich von Inner Join und Union für den tabellenübergreifenden Datenabgleich
Das Abrufen übereinstimmender Daten über mehrere Tabellen hinweg erfordert oft eine sorgfältige Überlegung der Datenbankabfragemethoden. Dieser Artikel vergleicht die Verwendung von INNER JOIN
und UNION
für diese Aufgabe und konzentriert sich auf Szenarien, in denen sie am effektivsten sind.
INNER JOIN
vs. UNION
INNER JOIN
: Dieser Vorgang verknüpft Zeilen aus zwei oder mehr Tabellen basierend auf übereinstimmenden Werten in bestimmten Spalten. Die Ergebnismenge enthält nur Zeilen, bei denen in allen verknüpften Tabellen eine Übereinstimmung besteht.UNION
: Dadurch werden die Ergebnismengen von zwei oder mehr SELECT
-Anweisungen in einer einzigen Ergebnismenge zusammengefasst, wodurch doppelte Zeilen vermieden werden. Es ist wichtig, dass die Anzahl und Datentypen der Spalten in den kombinierten Anweisungen identisch sind.Anschauliches Beispiel
Betrachten Sie zwei Tabellen:
tbl_facilitators
: Enthält Informationen zum Moderator.tbl_facilitatorClasses
: Enthält Kursdetails, einschließlich primärer und sekundärer Moderator-IDs.Das Ziel besteht darin, den Klassennamen sowie die Vor- und Nachnamen der primären und sekundären Moderatoren für jede Klasse abzurufen.
INNER JOIN
Lösung
Die folgende Abfrage verwendet INNER JOIN
, um dies zu erreichen:
<code class="language-sql">SELECT tbl_facilitatorClasses.className, tbl_facilitators.facilLname AS primary_facilitator_lname, tbl_facilitators.facilFname AS primary_facilitator_fname, tbl_facilitators2.facilLname AS secondary_facilitator_lname, tbl_facilitators2.facilFname AS secondary_facilitator_fname FROM tbl_facilitatorClasses INNER JOIN tbl_facilitators ON tbl_facilitatorClasses.primeFacil = tbl_facilitators.facilID INNER JOIN tbl_facilitators AS tbl_facilitators2 ON tbl_facilitatorClasses.secondFacil = tbl_facilitators2.facilID;</code>
Diese Abfrage verknüpft tbl_facilitatorClasses
effizient mit tbl_facilitators
zweimal (unter Verwendung eines Alias für die zweite Verknüpfung), um die erforderlichen Informationen für primäre und sekundäre Moderatoren in einem einzigen, strukturierten Ergebnis abzurufen.
UNION
Einschränkungen
Ein UNION
-Vorgang ist für dieses Szenario ungeeignet. Ein UNION
würde eine erhebliche Umstrukturierung der Daten erfordern, was zu einem weniger effizienten und weniger lesbaren Ergebnis führen würde und nicht die gewünschte kombinierte Zeilenstruktur für jede Klasse bereitstellen würde.
Fazit
Zum Abrufen verwandter Daten aus mehreren Tabellen basierend auf übereinstimmenden Spaltenwerten, wie in diesem Beispiel gezeigt, ist INNER JOIN
im Vergleich zu UNION
die weitaus geeignetere und effizientere Wahl. UNION
eignet sich besser zum Kombinieren verschiedener Ergebnismengen aus ähnlichen Abfragen und nicht zum Zusammenführen von Daten basierend auf relationalen Schlüsseln.
Das obige ist der detaillierte Inhalt vonWie kann man passende Daten tabellenübergreifend effizient abrufen: Inner Join vs. Union?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!