Torna all'elenco degli articoli Articoli
Tempo di lettura: 9 minuti

Quali sono i diversi tipi di JOIN SQL?

Non si può sottovalutare l'importanza del JOIN nell'apprendimento dell'SQL. Non solo è una delle operazioni fondamentali nei database relazionali, ma è anche molto versatile, con molti tipi diversi. Sebbene il JOIN SQL possa intimorire all'inizio, una volta compreso diventa uno strumento molto utile nel vostro arsenale. Esploriamo tutti i tipi di SQL JOIN!

Possiamo dire con certezza che l'operazione JOIN è una delle funzioni più potenti di SQL. È la fonte di invidia per tutti i DBMS (sistemi di gestione di database) non relazionali: è un concetto molto semplice, ma ampiamente applicabile nei casi di unione di due insiemi di dati.

In poche parole, JOIN è un'operazione in cui le tabelle vengono confrontate tra loro, riga per riga. Questo confronto consente di ottenere colonne da qualsiasi tabella coinvolta in JOIN.

Un ottimo punto di riferimento per gli esercizi dopo la lettura di questo articolo è il nostro corso interattivo SQL JOINs interattivo. Offre oltre 90 esercizi pratici sui diversi tipi di join qui trattati.

Ora creiamo 2 tabelle per esplorare e padroneggiare l'arte di JOIN. La prima tabella, employeesè composta da 5 colonne:

  • id - L'ID univoco del dipendente.
  • name - Il nome del dipendente.
  • specialization - La specializzazione del dipendente nell'azienda.
  • coach_id - L'ID dell'allenatore/mentore del dipendente. Si tratta di un altro dipendente di un'azienda.
  • project_id - L'ID del progetto corrente in cui il dipendente è coinvolto.
idnamespecializationcoach_idproject_id
1Olli WoodwardDeveloper41
2Pete NolanManagerNULL1
3Will BarkerIT Support43
4Uma NormanDeveloperNULL4
5Peggy BergManager24
6Mary SheltonAnalystNULLNULL

La seconda tabella è projects. Contiene 3 colonne:

  • id - L'ID univoco del progetto.
  • name - Il nome del progetto.
  • is_external - Un valore booleano che rappresenta se il progetto è esterno o interno.
idnameis_external
1Website UI/UX DesignTRUE
2Research & DevelopmentFALSE
3SupportFALSE
4Database Architecture DesignTRUE

Notate che c'è un collegamento logico tra le due tabelle. L'indirizzo project_id in employees corrisponde a id di projects. I valori corrispondenti nelle tabelle sono codificati a colori per una migliore presentazione.

Ora che abbiamo le tabelle, andiamo al sodo!

INNER JOIN (alias JOIN)

Il primo dei tipi di JOIN SQL è INNER JOIN. Quando si digita "JOIN" nel codice SQL, si utilizza INNER JOIN. Quindi, anche se non fa male, non è necessario scrivere INNER nelle query.

La parola chiave ON segue tutte le JOIN in SQL. Indica l'inizio della condizione di connessione. INNER JOINs Come tutte le altre JOIN, la funzione produce solo le righe che soddisfano la condizione di connessione.

Prima di proseguire, l'operatore JOIN non è l'unico modo per unire i dati di due tabelle. Si può anche usare WHERE. Siete interessati a saperne di più? Abbiamo l'articolo giusto per voi!

Ma mettiamo da parte la teoria per un momento e passiamo alla codifica. Utilizziamo le nostre due tabelle e una INNER JOIN per scoprire quale dipendente lavora su quale progetto:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
JOIN projects
 ON employees.project_id = projects.id

Prima di vedere il risultato di questa query, analizziamo la query stessa. Come si può vedere, uniamo le due tabelle utilizzando JOIN. Dopo JOIN, specifichiamo l'operatore ON e la condizione di unione.

Quindi, abbiamo unito le tabelle in base alla condizione che project_id della tabella employees sia uguale all'id della tabella projects. Osserviamo il risultato della query:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design

Vediamo che Olli Woodward e Pete Nolan hanno un progetto "Website UI/UX Design". Il loro project_id è uguale a 1, che è l'ID di questo progetto nella tabella projects. Lo stesso vale per le altre righe del risultato.

Tuttavia, qui non vediamo Mary Shelton. Il suo project_id è NULL, e non c'è nessun progetto con l'id uguale a NULL. Allo stesso modo, il progetto "Ricerca e Sviluppo" ha l'ID 2, ma nessun dipendente ha l'id project_id uguale a 2.

Vi siamo interessati a INNER JOIN e volete saperne di più? Date un'occhiata al nostro articolo specifico sulle INNER JOIN!

JOIN ESTERNO SINISTRO

LEFT OUTER JOIN è uno dei tipi di JOIN esterni di SQL. La parola chiave OUTER è opzionale e spesso viene omessa, lasciando così solo l'operatore LEFT JOIN.

La differenza generale tra OUTER JOIN e INNER JOIN è che la OUTER JOIN include non solo le righe che soddisfano la condizione di connessione, ma anche le righe che non soddisfano la condizione da una (o più) tabelle.

In particolare, la LEFT OUTER JOIN include le righe che soddisfano la condizione di connessione (proprio come la INNER JOIN) e tutte le altre righe della tabella di sinistra (o della prima). Utilizziamo l'esempio precedente, cambiando JOIN in LEFT JOIN per vedere la differenza:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
LEFT JOIN projects
 ON employees.project_id = projects.id

Ecco il risultato della query:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
Mary SheltonAnalystNULL

Come si può vedere, è stata aggiunta un'altra riga: Mary Shelton con il progetto NULL. Questa riga in particolare non soddisfa la condizione employees.project_id = projects.id, poiché non esistono progetti con un ID NULL. Ma questa riga esiste nella tabella employees quindi viene aggiunta al risultato. Il nome del progetto per Mary Shelton è un valore NULL per lo stesso motivo, poiché non esistono ID NULL tra i progetti.

Ora avete capito l'idea principale di LEFT OUTER JOIN. Detto questo, potete sempre leggere il nostro articolo sulle LEFT OUTER JOIN per saperne di più o per vedere altri esempi!

INNER e LEFT OUTER JOINs sono i tipi più comuni di JOIN in SQL. Assicuratevi quindi di esercitarvi a fondo con il nostro corso. SQL JOINs corso. Leggete qui il corso.

JOIN ESTERNO DESTRO

La RIGHT OUTER JOIN può essere vista come un fratello gemello della LEFT OUTER JOIN. L'unica differenza tra questi due tipi di JOIN SQL è la tabella da cui vengono prelevati i record, indipendentemente dalla condizione JOIN. Nel caso di LEFT OUTER JOIN, si tratta della prima tabella o della tabella di sinistra; nel caso di RIGHT OUTER JOIN, si tratta della seconda tabella o della tabella di destra.

Utilizziamo l'esempio precedente, ma ora cambiamo LEFT JOIN in RIGHT JOIN:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
RIGHT JOIN projects
 ON employees.project_id = projects.id

Analizziamo ora il risultato della query:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
NULLNULLResearch & Development

Come si può vedere, il record di Mary Shelton è sparito. Non soddisfa la condizione ON e non appartiene alla tabella di destra. Quindi, non è incluso nel risultato.

D'altra parte, ora abbiamo il progetto "Ricerca e sviluppo". Non soddisfa la condizione JOIN, ma esiste nella tabella di destra e quindi viene incluso nel risultato. Si noti che questa riga ha NULLs nelle colonne dipendenti e specialization. Questo perché nessun record della tabella employees ha project_id uguale a 2, l'ID di questo progetto. Pertanto, viene restituito un NULL.

JOIN ESTERNO COMPLETO

FULL OUTER JOIN, o semplicemente FULL JOIN, è l'ultimo tipo di OUTER JOIN. In un certo senso, combina sia LEFT che RIGHT OUTER JOINs.

Sebbene includa i record che soddisfano la condizione JOIN, include anche le righe di entrambe le tabelle che non la soddisfano. In altre parole, FULL JOIN restituisce tutte le righe di entrambe le tabelle. Se una riga di una tabella non ha un record corrispondente nell'altra tabella, i dati mancanti vengono riempiti con NULLs.

Vediamo un esempio di FULL OUTER JOIN:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
FULL JOIN projects
 ON employees.project_id = projects.id

Ecco il risultato:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
Mary SheltonAnalystNULL
NULLNULLResearch & Development

Come si può vedere, qui abbiamo tutte le righe di entrambe le tabelle. Le righe che soddisfano la condizione hanno i dati corrispondenti di entrambe le tabelle. Per le righe che non soddisfano la condizione, le colonne dell'altra tabella sono riempite con NULLs.

Se volete una breve descrizione accessibile di FULL OUTER JOIN e di altri tipi di JOIN SQL, utilizzate il nostro SQL JOIN Cheat Sheet.

GIUNTA INCROCIATA

Questo tipo di JOIN SQL è molto diverso da quelli menzionati finora in questo articolo. Non solo il suo scopo è diverso, ma ha anche una sintassi leggermente diversa.

Quando viene utilizzata in una query, CROSS JOIN restituisce un prodotto cartesiano: tutte le possibili combinazioni delle righe di entrambe le tabelle. Tutti i record di una tabella vengono automaticamente uniti a tutti i record dell'altra.

Inoltre, non esiste la condizione ON. Per questo JOIN in una query, è sufficiente utilizzare l'operatore CROSS JOIN senza seguire la parola chiave ON.

Vediamo come funziona il tutto in un esempio:

SELECT
 employees.name as employee,
 projects.name as project
FROM employees
CROSS JOIN projects

Notate che selezioniamo due colonne, il nome del dipendente e il nome del progetto, seguite da CROSS JOIN. Osserviamo il risultato:

employeeproject
Olli WoodwardWebsite UI/UX Design
Olli WoodwardResearch & Development
Olli WoodwardSupport
Olli WoodwardDatabase Architecture Design
Pete NolanWebsite UI/UX Design
Pete NolanResearch & Development
Pete NolanSupport
Pete NolanDatabase Architecture Design
Will BarkerWebsite UI/UX Design
Will BarkerResearch & Development
Will BarkerSupport
Will BarkerDatabase Architecture Design
Uma NormanWebsite UI/UX Design
Uma NormanResearch & Development
Uma NormanSupport
Uma NormanDatabase Architecture Design
Peggy BergWebsite UI/UX Design
Peggy BergResearch & Development
Peggy BergSupport
Peggy BergDatabase Architecture Design
Mary SheltonWebsite UI/UX Design
Mary SheltonResearch & Development
Mary SheltonSupport
Mary SheltonDatabase Architecture Design

Si noti il numero di righe restituite. È abbastanza facile calcolarlo: il numero di righe della prima tabella * il numero di righe della seconda tabella = il numero di righe risultanti. Quindi, ognuno dei 6 dipendenti è assegnato a ciascuno dei 4 progetti.

Avete ancora qualche domanda in sospeso su CROSS JOIN? O forse volete solo saperne di più. Consultate la nostra Guida illustrata alle CROSS JOIN SQL!

Esercitatevi con tutti i tipi di JOIN SQL!

Ora conoscete i diversi tipi di JOIN in SQL. Questa è un'ottima occasione per approfondire queste nuove conoscenze o semplicemente per ripassare quelle già acquisite. In ogni caso, vi consiglio il nostro corso interattivo sulle JOIN in SQL. Con oltre 90 esercizi pratici, è un'opportunità per mettere in pratica questo aspetto fondamentale di SQL!