Oggi passiamo a uno degli argomenti più interessanti quando si lavora con i database relazionali — unire dati da più tabelle usando JOIN. È uno strumento potentissimo che ti apre le porte per creare relazioni complesse e fare analisi serie.
Pensa al tuo database come a un fumetto gigante, dove ogni tabella separata è una vignetta. Per raccontare tutta la storia, devi collegare queste vignette. Ed è proprio qui che JOIN ti dà una mano. L'unione dei dati è il processo che permette a una query di tirare fuori info da più tabelle e collegarle in base a certe condizioni.
I database relazionali sono costruiti attorno al concetto di relazioni tra tabelle. Ogni tabella tiene info su una certa entità, e per avere una visione completa spesso vogliamo collegare dati da tabelle diverse. Per esempio:
- La tabella
studentscontiene la lista degli studenti. - La tabella
coursestiene la lista dei corsi. - La tabella
enrollmentsmostra chi frequenta quali corsi.
Per sapere quale studente segue quale corso, dobbiamo collegare queste tabelle. Ai colloqui, uno sviluppatore che sa usare JOIN fa subito una bella figura, perché è una delle skill più richieste quando si lavora coi dati.
Tipi principali di join
In PostgreSQL ci sono diversi tipi di JOIN, ognuno pensato per situazioni specifiche. Vediamoli in generale, senza impazzire subito con esempi complicati:
Tipo di JOIN |
Descrizione |
|---|---|
INNER JOIN |
Restituisce le righe che hanno una corrispondenza in entrambe le tabelle. |
LEFT JOIN |
Restituisce tutte le righe dalla tabella di sinistra, e solo le corrispondenti da quella di destra. |
RIGHT JOIN |
Restituisce tutte le righe dalla tabella di destra, e solo le corrispondenti da quella di sinistra. |
FULL OUTER JOIN |
Restituisce tutte le righe da entrambe le tabelle, mettendo NULL dove non ci sono corrispondenze. |
La scelta di quale JOIN usare dipende da quello che ti serve:
- Se ti servono solo i dati che corrispondono in entrambe le tabelle, usa
INNER JOIN. - Se vuoi tenere tutti i dati da una tabella, e solo le corrispondenze dall'altra, vanno bene
LEFT JOINoRIGHT JOIN. - Se vuoi tutti i dati da entrambe le tabelle, anche se non corrispondono, usa
FULL OUTER JOIN.
Dai, vediamo come funzionano questi join direttamente con degli esempi pratici.
Esempio di esercizio — "Chi segue quale corso?"
Supponiamo di avere tre tabelle:
Tabella students
| id | name |
|---|---|
| 1 | Otto |
| 2 | Anna |
| 3 | Peter |
Tabella courses
| id | title |
|---|---|
| 101 | Matematica |
| 102 | Inglese |
Tabella enrollments
| student_id | course_id |
|---|---|
| 1 | 101 |
| 2 | 102 |
Queste tabelle sono collegate così:
- Il campo
idinstudentsè l'identificatore unico dello studente. - Il campo
idincoursesè l'identificatore unico del corso. - Nella tabella
enrollmentsle colonnestudent_idecourse_idcreano il collegamento tra studenti e corsi.
Supponiamo di dover rispondere a questa domanda: quale studente è iscritto a quale corso?
La risposta la otteniamo con un JOIN. Colleghiamo le tabelle in base alle loro relazioni:
- Colleghiamo
studentseenrollmentssuid = student_id. - Colleghiamo
enrollmentsecoursessucourse_id = id.
Ecco come sarà la query SQL:
SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;
Cosa fa questa query:
FROM enrollments— partiamo dalla tabella che collega studenti e corsi.JOIN students ON enrollments.student_id = students.id— ci uniamo agli studenti per prendere i loro nomi.JOIN courses ON enrollments.course_id = courses.id— ci uniamo ai corsi per prendere i titoli.
Il risultato sarà così:
| name | title |
|---|---|
| Otto | Matematica |
| Anna | Inglese |
Occhio: se uno studente non ha nessun corso, non comparirà nel risultato — perché il JOIN di default è stretto (INNER JOIN). Più avanti vedremo come includere anche questi studenti usando LEFT JOIN.
Se qualcosa in questa query ti sembra strano, tranquillo! Capirci bene è proprio lo scopo delle prossime lezioni!
Perché serve davvero nella vita reale?
Ora che hai capito come collegare le tabelle, parliamo del mondo vero. Ti sei mai chiesto come funziona un e-commerce? Tipo, quando scegli uno smartphone e vedi le recensioni degli altri utenti.
- La tabella
productscontiene info sui prodotti. - La tabella
reviewscontiene le recensioni dei clienti. - La tabella
customerscontiene info sui clienti stessi
Per mostrare le recensioni sul sito, bisogna unire le tabelle products, reviews e customers. Questo è proprio il JOIN in azione.
A cosa stare attenti?
Prima di tuffarci nei JOIN nelle prossime lezioni, ecco un paio di cose da ricordare:
- L'ordine nei
JOINconta. Per esempio,LEFT JOINrestituisce le righe dalla tabella di sinistra, quindi se cambi l'ordine cambia anche il risultato. - Lavora con tabelle piccole. All'inizio evita query su milioni di righe. Ricorda, anche la query più semplice deve essere chiara.
- Abituati a pensare alle relazioni. Quando inizi a vedere le tabelle come parti di una grande struttura, lavorare con i
JOINdiventa naturale.
Da oggi iniziamo a diventare veri SQL-specialist. Nella prossima lezione scoprirai come usare INNER JOIN per tirare fuori dati da due tabelle. Sarà un bel passo avanti nel tuo percorso con PostgreSQL.
GO TO FULL VERSION