Articles

SQL CROSS JOIN

Posted on

L’SQL Cross Join restituisce il prodotto cartesiano di entrambe le tabelle. Il prodotto cartesiano significa il numero di righe presenti nella tabella 1 moltiplicato per il numero di righe presenti nella tabella 2. Il Cross Join di SQL Server non richiede alcuna colonna comune per unire due tabelle. Vediamo la rappresentazione visiva del Cross Join per una migliore comprensione.

SQL CROSS JOIN Chart

Dallo screenshot sopra, si può facilmente capire che SQL Server Cross join visualizza il prodotto cartesiano di due tabelle. Significa che ogni record della tabella A si combina con ogni record della tabella B

SQL Cross Join Sintassi

La sintassi del Cross Join in SQL Server è

-- 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 

Per questo esempio di Cross Join di SQL Server, usiamo due tabelle (Employee e Department). I dati presenti nella tabella Employee

SQL CROSS JOIN Example

I dati presenti nella tabella Department di SQL Server sono:

SQL CROSS JOIN

SQL Cross Join Select * Esempio

La seguente query di Cross Join visualizzerà tutte le colonne esistenti in un dipendente & tabelle di reparto

-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT * FROM CROSS JOIN ;

Se si osserva la seguente schermata di Join, Sta visualizzando 120 record. Significa che 15 righe della tabella Employee si moltiplicano per 8 righe della tabella Department

SQL CROSS JOIN 3

NOTA: Vi suggerisco di selezionare singoli nomi di colonna. Si prega di evitare la frase SELECT * nel Cross Join per evitare colonne indesiderate come id, DeptID, id, ecc.

SQL Cross Join Select Few Columns Example

Come abbiamo detto prima, si prega di selezionare le colonne richieste dopo la frase SELECT per evitare colonne indesiderate. La seguente query di cross join mostrerà il prodotto cartesiano delle colonne presenti nelle tabelle Employee e Department.

-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,FROM CROSS JOIN 
SQL CROSS JOIN 4

SQL Cross Join Colonne ambigue

La precedente query Transact funziona perfettamente se i nomi delle colonne di entrambe le tabelle (Employee e Department) sono diversi come sopra. Cosa succede se hanno gli stessi nomi di colonna in entrambe le tabelle? Beh, con l’approccio di cui sopra, vi ritroverete con un errore.

Lasciate che vi mostri un esempio pratico. Abbiamo aggiunto id dalla tabella dei dipartimenti come colonna aggiuntiva alla query di cui sopra.

-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,id ,FROM CROSS JOIN 

Come vedete, sta lanciando un errore: Nome colonna ambiguo id. È perché la colonna id è presente sia nella tabella dei dipendenti che in quella dei dipartimenti. E SQL Server non sa quale colonna gli state chiedendo di recuperare.

SQL CROSS JOIN 5

Per risolvere questo tipo di problemi, dovete sempre usare il nome della tabella prima del nome della colonna. La seguente query Cross Join utilizza il nome della tabella ALIAS prima dei nomi delle colonne. Con questo approccio, possiamo informare il server che stiamo cercando la colonna id appartenente alla tabella dipartimento.

Possiamo scrivere la query di cross join di cui sopra come:

-- SQL Server Cross Join ExampleSELECT Emp. ,Emp. ,Dept.id ,Dept.FROM AS EmpCROSS JOIN AS Dept
SQL CROSS JOIN 6

Cross Join senza parola chiave Join

Si può anche evitare la parola chiave CROSS JOIN per ottenere il risultato.

-- 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 Where Clause

Possiamo usare la clausola Where insieme al cross join per limitare il numero di righe restituite dal Cross Join. Qui, usiamo la clausola WHERE insieme al 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

La cross join ci permette di usare la clausola Order By per riordinare l’ordine dei record.

-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS DeptWHERE Dept. = 'Software Developer'
SQL CROSS JOIN 7

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *