Was ist der Unterschied zwischen CROSS JOIN und FULL OUTER JOIN in SQL Server?
Sind sie gleich oder nicht? Bitte erkläre. Wann würde man eines davon verwenden?
quelle
Was ist der Unterschied zwischen CROSS JOIN und FULL OUTER JOIN in SQL Server?
Sind sie gleich oder nicht? Bitte erkläre. Wann würde man eines davon verwenden?
Eine Kreuzverknüpfung erzeugt ein kartesisches Produkt zwischen den beiden Tabellen und gibt alle möglichen Kombinationen aller Zeilen zurück. Es gibt keine on
Klausel, weil Sie einfach alles mit allem verbinden.
A full outer join
ist eine Kombination aus a left outer
und right outer
join. Es gibt alle Zeilen in beiden Tabellen zurück, die mit der where
Klausel der Abfrage übereinstimmen , und in Fällen, in denen die on
Bedingung für diese Zeilen nicht erfüllt werden kann, werden null
Werte für die nicht ausgefüllten Felder eingegeben.
In diesem Wikipedia- Artikel werden die verschiedenen Arten von Verknüpfungen anhand von Ausgabebeispielen anhand eines Beispielsatzes von Tabellen erläutert.
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
immer schneller sein alsFROM t1,t2 WHERE t1.id=t2.id
?outer join
schneller odercross join
?Eine Sache, die für manche nicht immer offensichtlich ist, ist, dass eine Kreuzverknüpfung mit einer leeren Tabelle (oder Ergebnismenge) zu einer leeren Tabelle führt (M x N; daher M x 0 = 0).
Eine vollständige äußere Verknüpfung hat immer Zeilen, es sei denn, sowohl M als auch N sind 0.
quelle
Ich möchte anderen Antworten einen wichtigen Aspekt hinzufügen, der mir dieses Thema am besten erklärt hat:
Wenn 2 verknüpfte Tabellen M- und N-Zeilen enthalten, erzeugt die Kreuzverknüpfung immer (M x N) Zeilen, aber die vollständige äußere Verknüpfung erzeugt von MAX (M, N) bis (M + N) Zeilen (abhängig davon, wie viele Zeilen tatsächlich vorhanden sind Match "on" Prädikat).
BEARBEITEN:
Aus Sicht der logischen Abfrageverarbeitung erzeugt CROSS JOIN tatsächlich immer M x N Zeilen. Was mit FULL OUTER JOIN passiert, ist, dass sowohl die linke als auch die rechte Tabelle "erhalten" bleiben, als ob sowohl die Verknüpfung LINKS als auch RECHTS geschehen wäre. Daher werden der Ergebnismenge Zeilen aus der linken und rechten Tabelle hinzugefügt, die das ON-Prädikat nicht erfüllen.
quelle
cross join
multipliziert die Tabellen; afull outer join
fügt sie im schlimmsten Fall hinzu, abhängig davon, wie viele Zeilen übereinstimmen.Cross Joins: Cross Joins erzeugen Ergebnisse, die aus jeder Kombination von Zeilen aus zwei oder mehr Tabellen bestehen. Das heißt, wenn Tabelle A 3 Zeilen und Tabelle B 2 Zeilen hat, führt ein CROSS JOIN zu 6 Zeilen. Es besteht keine Beziehung zwischen den beiden Tabellen - Sie erstellen buchstäblich nur jede mögliche Kombination.
Vollständige äußere Verbindung: Eine vollständige äußere Verbindung ist weder "links" noch "rechts" - es ist beides! Es enthält alle Zeilen aus beiden Tabellen oder Ergebnismengen, die am JOIN teilnehmen. Wenn für Zeilen auf der "linken" Seite von JOIN keine übereinstimmenden Zeilen vorhanden sind, werden Nullwerte aus der Ergebnismenge auf der "rechten Seite" angezeigt. Wenn umgekehrt keine übereinstimmenden Zeilen für Zeilen auf der "rechten" Seite von JOIN vorhanden sind, werden Nullwerte aus der Ergebnismenge auf der "linken Seite" angezeigt.
quelle
Für SQL Server
CROSS JOIN and FULL OUTER JOIN
sind unterschiedlich.CROSS JOIN
ist einfach ein kartesisches Produkt aus zwei Tabellen, unabhängig von Filterkriterien oder Bedingungen.FULL OUTER JOIN
gibt eine eindeutige ErgebnismengeLEFT OUTER JOIN and RIGHT OUTER JOIN
von zwei Tabellen. Es benötigt auch die ON-Klausel, um zwei Spalten von Tabellen zuzuordnen.quelle
Abgesehen vom zurückgegebenen NULL-Wert handelt es sich um dieselben Konzepte.
Siehe unten:
quelle
Cross Join : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR; Erzeugt alle möglichen Kombinationen zwischen 2 Tabellen (karthesisches Produkt)
(Vollständig) Outer Join : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; Gibt jede Zeile in beiden Tabellen und auch Ergebnisse mit denselben Werten zurück (Übereinstimmungen in ZUSTAND).
quelle
Eine vollständige äußere Verbindung kombiniert eine linke äußere Verbindung und eine rechte äußere Verbindung. Die Ergebnismenge gibt Zeilen aus beiden Tabellen zurück, in denen die Bedingungen erfüllt sind, gibt jedoch Nullspalten zurück, in denen keine Übereinstimmung vorliegt.
Ein Cross-Join ist ein kartesisches Produkt , für dessen Verknüpfung keine Bedingungen erforderlich sind. Die Ergebnismenge enthält Zeilen und Spalten, die eine Multiplikation beider Tabellen darstellen.
quelle
Hier ist ein Beispiel, in dem sowohl FULL OUTER JOIN als auch CROSS JOIN dieselbe Ergebnismenge zurückgeben, ohne dass NULL zurückgegeben wird. Bitte beachten Sie die 1 = 1 in der ON-Klausel für den FULL OUTER JOIN:
quelle
SQL FULL OUTER JOIN
Der FULL OUTER JOIN gibt unabhängig von der Übereinstimmung alle Zeilen aus der linken Tabelle (Tabelle 1) und aus der rechten Tabelle (Tabelle 2) zurück.
Das Schlüsselwort FULL OUTER JOIN kombiniert das Ergebnis von LEFT OUTER JOIN und RIGHT OUTER JOIN
Referenz: http://datasciencemadesimple.com/sql-full-outer-join/
SQL CROSS JOIN
In SQL CROSS JOIN wird jede Zeile der ersten Tabelle jeder Zeile der zweiten Tabelle zugeordnet.
Die Anzahl der Zeilen, die durch eine Ergebnismenge der CROSS JOIN-Operation erzeugt werden, entspricht der Anzahl der Zeilen in der ersten Tabelle multipliziert mit der Anzahl der Zeilen in der zweiten Tabelle.
CROSS JOIN ist auch als kartesisches Produkt / kartesisches Join bekannt
Die Anzahl der Zeilen in Tabelle A ist m, die Anzahl der Zeilen in Tabelle B ist n und die resultierende Tabelle hat m * n Zeilen
Referenz: http://datasciencemadesimple.com/sql-cross-join/
quelle