De SQL Cross Join geeft het cartesiaanse product van beide tabellen. Het cartesiaanse product is het aantal rijen in tabel 1 vermenigvuldigd met het aantal rijen in tabel 2. De SQL Server Cross Join heeft geen gemeenschappelijke kolom nodig om twee tabellen samen te voegen.
Vanuit de bovenstaande schermafbeelding kunt u gemakkelijk begrijpen dat SQL Server Cross join het cartesisch product van twee tabellen weergeeft. Dit betekent dat elk record in tabel A wordt gecombineerd met elk record in tabel B
SQL Cross Join Syntax
De syntax van de Cross Join in SQL Server is
-- 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
Voor dit SQL Server Cross Join voorbeeld gebruiken we twee tabellen (Werknemer en Afdeling). Gegevens aanwezig in de Werknemer tabel
Gegevens aanwezig in de SQL Server Afdeling tabel is:
SQL Cross Join Select * Voorbeeld
De volgende cross Join query toont alle bestaande kolommen in een & werknemer afdelingstabel
-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT * FROM CROSS JOIN ;
Als je de onderstaande Join screenshot bekijkt, Het toont 120 records. Dat betekent dat 15 rijen van de werknemer worden vermenigvuldigd met 8 rijen in de afdelingstabel
NOTA: Ik stel voor dat u individuele kolomnamen selecteert. Vermijd SELECT * Statement in Cross Join om ongewenste kolommen zoals id, DeptID, id, etc te vermijden.
SQL Cross Join Select Few Columns Example
Zoals eerder gezegd, selecteer de vereiste kolommen na het SELECT Statement om ongewenste kolommen te vermijden. De volgende cross join query toont het cartesiaanse product van de kolommen in de tabellen Werknemer en Afdeling.
-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,FROM CROSS JOIN
SQL Cross Join Dubbelzinnige kolommen
De bovenstaande Transact query werkt feilloos als de kolomnamen van beide tabellen (Werknemer en Afdeling) verschillend zijn, zoals hierboven. Wat gebeurt er als beide tabellen dezelfde kolomnamen hebben? Nou, met de hierboven beschreven aanpak, zult u eindigen met een fout.
Laat me je een praktisch voorbeeld laten zien. We hebben id uit de afdelingstabel als extra kolom aan de bovenstaande query toegevoegd.
-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,id ,FROM CROSS JOIN
Zoals u ziet, geeft hij een foutmelding: Ambiguous column name id. Dat komt omdat de kolom id zowel in de tabel Werknemer als in de tabel Afdeling voorkomt. En SQL Server weet niet welke kolom u vraagt op te halen.
Om dit soort problemen op te lossen, moet u altijd de tabelnaam vóór de kolomnaam gebruiken. De volgende Cross Join query gebruikt de ALIAS tabelnaam voor de kolomnamen. Op deze manier kunnen we de server laten weten dat we op zoek zijn naar de kolom id van de afdelingstabel.
We kunnen de bovenstaande cross join query als volgt schrijven:
-- SQL Server Cross Join ExampleSELECT Emp. ,Emp. ,Dept.id ,Dept.FROM AS EmpCROSS JOIN AS Dept
Cross Join zonder Join keyword
Je kunt het CROSS JOIN keyword ook vermijden om het resultaat te krijgen.
-- 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 Waar-clausule
We kunnen de Waar-clausule samen met de Cross Join gebruiken om het aantal rijen dat door de Cross Join wordt geretourneerd te beperken. Hier gebruiken we die WHERE-clausule samen met de 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
De cross join staat ons toe de Order By-clausule te gebruiken om de volgorde van de records te herschikken.
-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS DeptWHERE Dept. = 'Software Developer'