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

4 semplici modi per imparare finalmente quale JOIN utilizzare in una query SQL

Probabilmente sapete già che è necessario utilizzare le JOIN per combinare i dati di diverse tabelle. Ma che tipo di JOIN? In questo articolo presenterò quattro semplici modi per imparare finalmente quale JOIN utilizzare in diversi scenari.

Prima di passare alle strategie intelligenti per imparare SQL JOINs, vi suggerisco di fare una breve panoramica dei principali tipi di JOIN. Verranno illustrati diversi esempi per capire la differenza tra (INNER) JOIN, LEFT (OUTER) JOIN, RIGHT (OUTER) JOIN e FULL (OUTER) JOIN.

Tipi di JOIN SQL: Breve panoramica

Per i nostri esempi di JOIN, utilizzeremo i dati di un centro nascite, una struttura sanitaria gestita da ostetriche per madri in travaglio. In particolare, abbiamo due tabelle:

  1. newbornsche contiene alcune informazioni di base sui bambini nati in un determinato periodo.
  2. midwives, con i nomi e le informazioni sull'esperienza delle ostetriche che lavorano nel nostro centro nascite.

Ecco le tabelle:

newborns
idmother_namegenderweightheightmidwife_id
11Marta StewartMale3.452.0104
12Cathrine BlackFemale3.048.5101
13Julia GreyFemale2.848.1104
14Penelope GreenMale3.852.5105
15Gabriela GarciaMale2.948.8105
16Nikita MooreMale4.053.0102
17Lucy MillerFemale2.547.3101

midwives
idfirst_nameyears_experience
101Samantha White6
102Kathleen Webster2
103Sarah McCarty1
105Julia Smith4
106Angela Phillips0

Ora passiamo subito agli esempi.

COLLEGAMENTO INTERNO

Inizieremo con il tipo di JOIN più comune, ovvero INNER JOIN (o semplicemente JOIN). Questo tipo di join viene utilizzato per visualizzare i record corrispondenti di entrambe le tabelle.

Supponiamo di voler ottenere l'id del neonato, il nome della madre e anche il nome dell'ostetrica che ha aiutato durante il travaglio. Per ottenere queste informazioni, possiamo unire i metodi newborns e midwives in base all'ID dell'ostetrica, che è disponibile in entrambe le tabelle:

SELECT n.id, n.mother_name, m.name AS midwife
FROM newborns n
JOIN midwives m
ON n.midwife_id = m.id;

Per ridurre la digitazione, usiamo degli alias per i nomi delle tabelle: n per newborns e m per midwives. Utilizziamo anche un alias di colonna (m.name AS midwife) per ottenere un nome di colonna significativo nell'output.

Ecco il risultato:

idmother_namemidwife
12Cathrine BlackSamantha White
16Nikita MooreKathleen Webster
17Lucy MillerSamantha White
14Penelope GreenJulia Smith
15Gabriela GarciaJulia Smith

Abbiamo ottenuto le informazioni che volevamo. Tuttavia, si può notare che nella tabella dei risultati mancano alcuni neonati (ID 11 e 13). Ciò significa che i record corrispondenti (cioè gli ID delle ostetriche) non sono stati identificati nella seconda tabella (cioè midwives).

Se si desidera mantenere tutti i record della prima tabella, è necessario utilizzare LEFT JOIN.

GIUNTA SINISTRA

LEFT JOIN o LEFT OUTER JOIN viene utilizzata per visualizzare tutti i record della prima tabella (sinistra) e i record corrispondenti della seconda tabella (destra). Per mantenere tutti i neonati nell'output, si può utilizzare la stessa query di cui sopra, sostituendo semplicemente JOIN con LEFT JOIN:

SELECT n.id, n.mother_name, m.name AS midwife
FROM newborns n
LEFT JOIN midwives m
ON n.midwife_id = m.id;

E il risultato:

idmother_namemidwife
12Cathrine BlackSamantha White
14Penelope GreenJulia Smith
11Marta StewartNULL
13Julia GreyNULL
17Lucy MillerSamantha White
16Nikita MooreKathleen Webster
15Gabriela GarciaJulia Smith

Ora abbiamo tutti i record della tabella newborns visualizzati nell'output. Allo stesso tempo, ci sono due record con valori NULL nella colonna ostetrica. A quanto pare, l'ostetrica corrispondente (ID 104) non è presente nelle tabelle. midwives tabelle. Forse ha iniziato da poco a lavorare in un altro centro nascite.

Ottimo! Ma è interessante anche vedere se nel nostro centro nascite ci sono ostetriche che non hanno assistito a parti recenti. Scopriamolo usando la RIGHT JOIN.

GIUNTA DESTRA

RIGHT JOIN o RIGHT OUTER JOIN viene utilizzato per visualizzare tutti i record della seconda tabella (destra) e i record corrispondenti della prima tabella (sinistra). Se si vogliono mantenere tutti i record della tabella midwives, possiamo usare la stessa identica query SQL di prima, sostituendo semplicemente LEFT JOIN con RIGHT JOIN:

SELECT n.id, n.mother_name, m.name AS midwife
FROM newborns n
RIGHT JOIN midwives m
ON n.midwife_id = m.id;

Si noti che la RIGHT JOIN è usata raramente perché di solito può essere sostituita dalla LEFT JOIN. Nel nostro caso, potremmo usare la LEFT JOIN e invertire l'ordine delle tabelle, cioè mettere midwives nella clausola FROM e newborns nella clausola LEFT JOIN. Il risultato sarebbe lo stesso che si vede qui sotto:

idmother_namemidwife
12Cathrine BlackSamantha White
14Penelope GreenJulia Smith
15Gabriela GarciaJulia Smith
16Nikita MooreKathleen Webster
17Lucy MillerSamantha White
NULLNULLSarah McCarty
NULLNULLAngela Phillips

Nella tabella risultante, si può notare che ci sono due ostetriche senza record corrispondenti nella tabella newborns tabella: Sarah McCarty e Angela Phillips. Sembra che queste due ostetriche abbiano meno esperienza e probabilmente assistono le ostetriche più esperte senza essere assegnate a un ruolo importante.

Notiamo anche che ancora una volta non vediamo tutti i neonati nell'insieme dei risultati. E se volessimo conservare tutti i record di entrambe le tabelle? In questo caso si dovrebbe usare la FULL JOIN.

GIUNTA COMPLETA

FULL JOIN o FULL OUTER JOIN viene utilizzato per mantenere tutti i record di entrambe le tabelle. Quindi, se vogliamo mantenere tutti i neonati e tutte le ostetriche nell'insieme dei risultati, possiamo semplicemente sostituire RIGHT JOIN dell'ultimo esempio con FULL JOIN. Si noti anche che l'ordine delle tabelle non ha importanza con FULL JOIN; possiamo cambiare la posizione delle tabelle e ottenere lo stesso risultato:

SELECT n.id, n.mother_name, m.name AS midwife
FROM newborns n
FULL JOIN midwives m
ON n.midwife_id = m.id;
idmother_namemidwife
11Marta StewartNULL
12Cathrine BlackSamantha White
13Julia GreyNULL
14Penelope GreenJulia Smith
15Gabriela GarciaJulia Smith
16Nikita MooreKathleen Webster
17Lucy MillerSamantha White
NULLNULLSarah McCarty
NULLNULLAngela Phillips

Ora abbiamo alcuni valori NULL in tutte le colonne; questi indicano che alcuni record della tabella di sinistra non hanno trovato corrispondenza nella seconda tabella o che alcuni record della tabella di destra non hanno trovato corrispondenza nella prima tabella.

Tutti questi principi di JOIN non sembrano troppo impegnativi, vero? Tuttavia, la scelta della JOIN corretta da utilizzare è spesso una sfida per i principianti. Scopriamo quindi le migliori strategie per padroneggiare SQL JOINs.

4 modi per imparare SQL JOINs

Ecco quattro passi per padroneggiare finalmente i diversi tipi di SQL JOINs.

  1. Imparare le differenze chiave tra i tipi di JOIN. Il primo passo dovrebbe essere quello di conoscere i quattro principali tipi di JOIN e le regole di base per applicarli:
  • JOIN visualizza solo i record corrispondenti di entrambe le tabelle.
  • LEFT JOIN visualizza tutti i record della tabella di sinistra e i record corrispondenti della tabella di destra.
  • RIGHT JOIN visualizza tutti i record della tabella di destra e i record corrispondenti della tabella di sinistra.
  • FULL JOIN visualizza tutti i record di entrambe le tabelle.
  1. Leggete articoli di alta qualità su SQL JOINs. Dopo aver appreso le nozioni di base, si consiglia di esaminare i dettagli e i casi d'uso dei diversi tipi di JOIN. Vi suggerisco di iniziare con questi articoli che trattano tutti i principali tipi di JOIN e includono spiegazioni ed esempi dettagliati:
  1. Utilizzate il nostro foglio informativo sulle JOIN SQL. Anche se conoscete abbastanza bene SQL JOINs, spesso è utile avere un breve promemoria con la sintassi e i casi d'uso dei diversi tipi di JOIN. Vi consiglio di stampare o inserire tra i preferiti il nostro fantastico SQL JOIN Cheat Sheet. Si tratta di una guida illustrata a SQL JOINs che potete consultare ogni volta che non siete sicuri di come usare le JOIN in una query SQL.
  1. Pratica! Infine, se volete davvero padroneggiare il sito SQL JOINs, avete bisogno di molta pratica. Si possono leggere le sfide che si possono incontrare quando si fa pratica con SQL JOINs. Per rendere la vostra prima esperienza con SQL JOINs il più agevole possibile, vi suggerisco di iniziare con il corso interattivo di LearnSQL.com. SQL JOINs di LearnSQL.com. Questo corso pratico comprende 93 sfide di codifica che coprono tutti i principali tipi di SQL JOINs. In particolare, imparerete:
  • Quando usare JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN.
  • Come unire tre o più tabelle in un'unica query.
  • Come filtrare i dati con diversi tipi di join.
  • Come unire una tabella con se stessa.
  • Che cos'è un join non-equi e quando usarlo.

Per saperne di più su questo corso, consultate questo articolo riassuntivo.

Grazie per aver letto e buon apprendimento!