MySQL CROSS JOIN viene utilizzato per combinare tutte le possibilità di due o più tabelle e restituisce il risultato che contiene ogni riga di tutte le tabelle partecipanti. Il CROSS JOIN è noto anche come CARTESIAN JOIN, che fornisce il prodotto cartesiano di tutte le tabelle associate. Il prodotto cartesiano può essere spiegato moltiplicando tutte le righe presenti nella prima tabella per tutte le righe presenti nella seconda tabella. È simile all'Inner Join, dove la condizione di join non è disponibile con questa clausola.
Possiamo capirlo con la seguente rappresentazione visiva in cui CROSS JOIN restituisce tutti i record di table1 e table2 e ogni riga è la combinazione di righe di entrambe le tabelle.
Sintassi MySQL CROSS JOIN
La parola chiave CROSS JOIN viene sempre utilizzata con l'istruzione SELECT e deve essere scritta dopo la clausola FROM. La seguente sintassi recupera tutti i record da entrambe le tabelle di unione:
SELECT column-lists FROM table1 CROSS JOIN table2;
Nella sintassi precedente, elenchi-colonne è il nome della colonna o del campo che vuoi restituire e tabella1 e tabella2 sono il nome della tabella da cui recuperi i record.
Esempio di CROSS JOIN MySQL
Facciamo alcuni esempi per comprendere il funzionamento della clausola Left Join o Left Outer Join:
Clausola CROSS JOIN per unire due tabelle
Qui creeremo due tabelle 'clienti' E 'contatti' che contiene i seguenti dati:
Tabella: clienti
Tabella: contatti
Per recuperare tutti i record da entrambe le tabelle, eseguire la seguente query:
SELECT * FROM customers CROSS JOIN contacts;
Dopo aver eseguito con successo la query, verrà restituito il seguente output:
Quando viene eseguita l'istruzione CROSS JOIN, noterai che vengono visualizzate 42 righe. Significa che sette righe della tabella dei clienti si moltiplicano per le sei righe della tabella dei contatti.
NOTA: per evitare il risultato di colonne ripetute due volte, si consiglia di utilizzare nomi di colonne individuali anziché l'istruzione SELECT *.
Problema di colonne ambigue in MySQL CROSS JOIN
A volte è necessario recuperare i record della colonna selezionata da più tabelle. Queste tabelle possono contenere alcuni nomi di colonna simili. In tal caso, l'istruzione MySQL CROSS JOIN genera un errore: il nome della colonna è ambiguo. Significa che il nome della colonna è presente in entrambe le tabelle e MySQL si confonde su quale colonna si desidera visualizzare. I seguenti esempi lo spiegano più chiaramente:
SELECT customer_id, cust_name, income, order_id, price FROM customer CROSS JOIN orders;
Il CROSS JOIN precedente genera un errore come indicato nell'immagine seguente:
Questo problema può essere risolto utilizzando il nome della tabella prima del nome della colonna. La query precedente può essere riscritta come:
SELECT customer.customer_id, customer.cust_name, customer.income, orders.order_id, orders.price FROM customer CROSS JOIN orders;
Dopo aver eseguito la query precedente, otterremo il seguente output:
UNISCITI A SINISTRA con la clausola WHERE
La clausola WHERE viene utilizzata per restituire il file filtro risultato dalla tabella. L'esempio seguente illustra ciò con la clausola CROSS JOIN:
SELECT customers.customer_id, customers.cust_name, customers.income, orders.order_id, orders.price FROM customers CROSS JOIN orders USING(customer_id) WHERE price>1500 AND price<5000; < pre> <p>This statement gives the below result:</p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-7.webp" alt="MySQL CROSS JOIN"> <h3>MySQL CROSS JOIN Multiple Tables</h3> <p>We have already created two tables named ' <strong>customers'</strong> and ' <strong>orders'</strong> . Let us create one more table and name it as ' <strong>contacts' that contains the following data:</strong> </p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-8.webp" alt="MySQL CROSS JOIN"> <p>Here, we are going to explain CROSS JOIN with LEFT JOIN using three tables. Execute the following statement to join the three table customers, orders, and contacts. In this statement, first CROSS JOIN completed between orders and contacts, and then LEFT JOIN executes according to the specified condition.</p> <pre> SELECT * FROM customer LEFT JOIN(orders CROSS JOIN contacts) ON customer.customer_id=contact_id ORDER BY income; </pre> <p>After successful execution of the above query, it will give the following output:</p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-9.webp" alt="MySQL CROSS JOIN"> <hr></5000;>
Dopo aver eseguito con successo la query di cui sopra, verrà restituito il seguente output:
5000;>