Utilizzo di cross join

Completato

Un cross join è semplicemente un prodotto cartesiano delle due tabelle. Usando la sintassi ANSI SQL-89, è possibile creare un cross join semplicemente omettendo il filtro che connette le due tabelle. L'uso della sintassi ANSI-92 è leggermente più complicato e questo è un vantaggio perché, in genere, un cross join non è un'operazione desiderata. Con la sintassi ANSI-92, è poco probabile che si utilizzi un cross join in modo accidentale.

Per creare in modo esplicito un prodotto cartesiano, si usa l'operatore CROSS JOIN.

Questa operazione genera un set di risultati con tutte le possibili combinazioni di righe di input:

SELECT <select_list>
FROM table1 AS t1
CROSS JOIN table2 AS t2;

Sebbene questo risultato non sia in genere un output desiderato, esistono alcune applicazioni pratiche che richiedono la scrittura di un CROSS JOIN esplicito, ad esempio:

  • La creazione di una tabella di numeri, con una riga per ogni valore possibile in un intervallo.
  • La generazione di grandi volumi di dati per i test. Usando un join incrociato con se stesso, una tabella con solo 100 righe può generare immediatamente 10.000 righe di output con un minimo sforzo da parte dell'utente.

Sintassi CROSS JOIN

Quando si scrivono query con inner join, tenere presenti le linee guida seguenti:

  • Non viene eseguita alcuna corrispondenza delle righe e pertanto non viene usata alcuna clausola ON. (L'uso di una clausola ON con CROSS JOIN è un errore.)
  • Per usare la sintassi ANSI SQL-92, separare i nomi delle tabelle di input con l'operatore CROSS JOIN.

La query seguente è un esempio dell'uso di CROSS JOIN per la creazione di tutte le combinazioni di dipendenti e prodotti:

SELECT emp.FirstName, prd.Name
FROM HR.Employee AS emp
CROSS JOIN Production.Product AS prd;