Articles

SQL CROSS JOIN

Posted on

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.

SQL CROSS JOIN Grafiek

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

SQL CROSS JOIN Voorbeeld

Gegevens aanwezig in de SQL Server Afdeling tabel is:

SQL CROSS JOIN

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

SQL CROSS JOIN 3

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 4

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.

SQL CROSS JOIN 5

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
SQL CROSS JOIN 6

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 1

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'
SQL CROSS JOIN 2

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'
SQL CROSS JOIN 7

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *