Der SQL Cross Join liefert das kartesische Produkt beider Tabellen. Kartesisches Produkt bedeutet Anzahl der Zeilen in Tabelle 1 multipliziert mit Anzahl der Zeilen in Tabelle 2. Der SQL Server Cross Join benötigt keine gemeinsame Spalte, um zwei Tabellen zu verbinden. Sehen wir uns zum besseren Verständnis die visuelle Darstellung des Cross Join an.
Aus dem obigen Screenshot können Sie leicht erkennen, dass SQL Server Cross Join das kartesische Produkt zweier Tabellen anzeigt. Das bedeutet, dass jeder Datensatz in Tabelle A mit jedem Datensatz in Tabelle B kombiniert wird
SQL Cross Join Syntax
Die Syntax des Cross Join in SQL Server lautet
-- SQL Server Cross Join SyntaxSELECT Table1.Column(s), Table2.Column(s),FROM Table1 CROSS JOIN Table2 --OR We can Simply Write it asSELECT Table1. Column(s), Table2. Column(s),FROM Table1, Table2
Für dieses SQL Server Cross Join Beispiel verwenden wir zwei Tabellen (Mitarbeiter und Abteilung). Die Daten in der Tabelle Mitarbeiter
Die Daten in der SQL Server Tabelle Abteilung sind:
SQL Cross Join Select * Beispiel
Die folgende Cross Join Abfrage zeigt alle vorhandenen Spalten in einer Mitarbeiter-& Abteilungs-Tabelle an
-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT * FROM CROSS JOIN ;
Wenn Sie den folgenden Join-Screenshot betrachten, Es werden 120 Datensätze angezeigt. Das bedeutet, dass 15 Zeilen aus der Tabelle „Employee“ mit 8 Zeilen in der Tabelle „Department“ multipliziert werden
Hinweis: Ich schlage vor, dass Sie einzelne Spaltennamen auswählen. Bitte vermeiden Sie die SELECT * Anweisung im Cross Join, um unerwünschte Spalten wie id, DeptID, id, etc. zu vermeiden.
SQL Cross Join Select Few Columns Example
Wie bereits erwähnt, wählen Sie bitte die benötigten Spalten nach der SELECT Anweisung aus, um unerwünschte Spalten zu vermeiden. Die folgende Cross-Join-Abfrage zeigt das kartesische Produkt der Spalten an, die in den Tabellen „Mitarbeiter“ und „Abteilung“ vorhanden sind.
-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,FROM CROSS JOIN
SQL Cross Join Zweideutige Spalten
Die obige Transact-Abfrage funktioniert einwandfrei, wenn die Spaltennamen der beiden Tabellen (Mitarbeiter und Abteilung) unterschiedlich sind, wie oben beschrieben. Was passiert, wenn die Spaltennamen in beiden Tabellen gleich sind? Nun, mit dem oben beschriebenen Ansatz werden Sie mit einem Fehler enden.
Lassen Sie mich Ihnen ein praktisches Beispiel zeigen. Wir haben id aus der Tabelle department als zusätzliche Spalte zur obigen Abfrage hinzugefügt.
-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,id ,FROM CROSS JOIN
Wie Sie sehen, wird ein Fehler ausgegeben: Zweideutiger Spaltenname id. Das liegt daran, dass die Spalte id sowohl in der Tabelle „Mitarbeiter“ als auch in der Tabelle „Abteilung“ vorhanden ist. Und SQL Server weiß nicht, welche Spalte er abrufen soll.
Um diese Art von Problemen zu lösen, müssen Sie immer den Tabellennamen vor dem Spaltennamen verwenden. In der folgenden Cross-Join-Abfrage wird der ALIAS-Tabellenname vor den Spaltennamen verwendet. Auf diese Weise können wir dem Server mitteilen, dass wir nach der Spalte id suchen, die zur Tabelle department gehört.
Wir können die obige Cross-Join-Abfrage wie folgt schreiben:
-- SQL Server Cross Join ExampleSELECT Emp. ,Emp. ,Dept.id ,Dept.FROM AS EmpCROSS JOIN AS Dept
Cross Join ohne Join-Schlüsselwort
Sie können das Schlüsselwort CROSS JOIN auch vermeiden, um das Ergebnis zu erhalten.
-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp,CROSS JOIN AS Dept--OR We Can simply Write it asSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS Dept
SQL Cross-Join Where-Klausel
Wir können die Where-Klausel zusammen mit dem Cross-Join verwenden, um die Anzahl der vom Cross-Join zurückgegebenen Zeilen zu beschränken. Hier verwenden wir die WHERE-Klausel zusammen mit dem Cross Join.
-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS DeptWHERE Dept. = 'Software Developer'
Cross Join Order By Clause Example
Der Cross-Join erlaubt es uns, die Reihenfolge der Datensätze mit der Order By Clause neu zu ordnen.
-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS DeptWHERE Dept. = 'Software Developer'