English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, imparerai come ottenere dati da due tabelle utilizzando l'operatore CROSS JOIN di SQL.
Se non si specifica una condizione di connessione quando si connettono due tabelle, il sistema di database unirà ogni riga della prima tabella con ogni riga della seconda tabella. Questo tipo di connessione si chiama connessione crociata o prodotto cartesiano. Il diagramma di Venn seguente spiega come funziona la connessione crociata.
Per comprendere meglio questo concetto, diamo un'occhiata a quanto segueemployeesedepartments表。
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 4 | | 1 | | 5 | | 3 | | NULL | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Amministrazione | | 2 | Servizio Clienti | | 3 | Finanza | | 4 | Risorse Umane | | 5 | Vendite | +---------+------------------+ | |
Tabella: employees | Tabella: departments |
Il numero di righe nella giunzione crociana è il prodotto del numero di righe in ciascuna tabella. Questo è un esempio semplice dell'operazione di giunzione crociana.
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 CROSS JOIN departments AS t2;
Suggerimento:La giunzione crociana crea il prodotto cartesiano o moltiplica tutte le righe di una tabella per tutte le righe dell'altra tabella. Quindi, ad esempio, se una tabella ha 5 righe e l'altra tabella ha 10 righe, la query di giunzione crociana producirà 50 righe, cioè il prodotto di 5 e 10.
Eseguito il comando precedente, riceverete i seguenti risultati:
+--------+--------------+------------+------------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+------------------+ | 1 | Ethan Hunt | 2001-05-01 | Amministrazione | | 2 | Tony Montana | 2002-07-15 | Amministrazione | | 3 | Sarah Connor | 2005-10-18 | Amministrazione | | 4 | Rick Deckard | 2007-01-03 | Amministrazione | | 5 | Martin Blank | 2008-06-24 | Amministrazione | | 1 | Ethan Hunt | 2001-05-01 | Servizio Clienti | | 2 | Tony Montana | 2002-07-15 | Servizio Clienti | | 3 | Sarah Connor | 2005-10-18 | Customer Service | | 4 | Rick Deckard | 2007-01-03 | Customer Service | | 5 | Martin Blank | 2008-06-24 | Customer Service | | 1 | Ethan Hunt | 2001-05-01 | Finance | | 2 | Tony Montana | 2002-07-15 | Finance | | 3 | Sarah Connor | 2005-10-18 | Finance | | 4 | Rick Deckard | 2007-01-03 | Finance | | 5 | Martin Blank | 2008-06-24 | Finance | | 1 | Ethan Hunt | 2001-05-01 | Human Resources | | 2 | Tony Montana | 2002-07-15 | Human Resources | | 3 | Sarah Connor | 2005-10-18 | Human Resources | | 4 | Rick Deckard | 2007-01-03 | Human Resources | | 5 | Martin Blank | 2008-06-24 | Human Resources | | 1 | Ethan Hunt | 2001-05-01 | Sales | | 2 | Tony Montana | 2002-07-15 | Sales | | 3 | Sarah Connor | 2005-10-18 | Sales | | 4 | Rick Deckard | 2007-01-03 | Sales | | 5 | Martin Blank | 2008-06-24 | Sales | +--------+--------------+------------+------------------+
Come avete visto, l'effetto del join crociato non è come descritto nei capitoli precedenti. Poiché la query non specifica le condizioni di connessione, ogni riga della tabella employees viene combinata con ogni riga della tabella departments. Pertanto, non utilizzate il join crociato a meno che non vogliate utilizzare il prodotto cartesiano.