Lezione 9: Unire le Tabelle — L'Arte del Matchmaking in SQL!


Lesson 9

Lezione 9: Unire le Tabelle — L’Arte del Matchmaking in SQL!

Bentornato, appassionato di database! Oggi ci tuffiamo nel magico mondo dei join — il modo in cui SQL introduce le tabelle l’una all’altra, come un Cupido dei dati che sa esattamente quali tabelle devono stare insieme. Che tu stia mettendo insieme impiegati e reparti, o eroi e le loro epiche missioni, padroneggiare i join renderà le tue query PostgreSQL una sinfonia di relazioni perfette.

Iniziamo a giocare a fare Cupido con i tuoi dati!

Cos’è un Join?

Un join in SQL è come organizzare un appuntamento al buio tra due tabelle. Chiedi a PostgreSQL di mettere insieme i dati correlati, assicurandoti che le righe di una tabella siano abbinate alle righe di un’altra, basandosi su qualche valore comune (come un ID, un nome o magari un interesse per il giardinaggio… ma più probabilmente un ID).

Esistono diversi tipi di join, ognuno con il proprio “stile di relazione” — dal dolce inner join al più complicato outer join. Incontriamoli tutti!

1. Inner Join — Il Match Perfetto

L’inner join è l’equivalente SQL di trovare il tuo partner perfetto al primo incontro. Restituisce solo le righe in cui entrambe le tabelle hanno valori corrispondenti nelle colonne specificate. Se non c’è corrispondenza, quelle righe vengono lasciate al loro destino.

In pratica: “Avete qualcosa in comune? Perfetto, siete un’accoppiata vincente!”

SELECT employees.nome, departments.nome_reparto
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;

In questa query, PostgreSQL mostrerà solo gli impiegati che hanno un reparto corrispondente. Nessun reparto? Nessuna possibilità!

2. Left Join (o Left Outer Join) — L’Amico Generoso

Il left join è come quell’amico che si assicura sempre che nessuno venga lasciato indietro. Restituisce tutte le righe della tabella sinistra (quella che elenchi per prima), anche se non c’è corrispondenza nella tabella di destra. Dove non c’è una corrispondenza, PostgreSQL gentilmente riempie il vuoto con NULL.

In breve: “Non importa se la tabella di destra è occupata, io mi prendo cura di tutte le righe della sinistra!”

SELECT eroi.nome, missioni.nome_missione
FROM eroi
LEFT JOIN missioni
ON eroi.missione_id = missioni.id;

Con questa query, anche se un eroe non ha ancora una missione assegnata, apparirà comunque, con uno spazio vuoto dove dovrebbe esserci il nome della missione (pronto, Taylor Swift?).

3. Right Join (o Right Outer Join) — Il Fratello di Supporto

Il right join è come il fratello gemello del left join, ma con un’inversione di ruoli. Restituisce tutte le righe della tabella destra, anche se non ci sono corrispondenze nella tabella di sinistra. Quindi, se la tabella di destra ha righe extra, vengono comunque incluse.

In altre parole: “Ehi, tabella di destra, ti copriamo le spalle, qualsiasi cosa accada.”

SELECT missioni.nome_missione, eroi.nome
FROM missioni
RIGHT JOIN eroi
ON missioni.id = eroi.missione_id;

Qui, se una missione non è stata ancora assegnata a un eroe, apparirà comunque. Forse è in attesa di un nuovo eroe coraggioso!

4. Full Outer Join — Il Democratizzatore

Il full outer join è l’equivalente SQL di un invito aperto a tutti. Restituisce tutte le righe in cui c’è una corrispondenza in una delle due tabelle, e quando non c’è corrispondenza, PostgreSQL semplicemente alza le spalle e riempie i vuoti con NULL. Tutti sono invitati alla festa, che abbiano un partner o no.

In pratica: “Tutti sono benvenuti! Se c’è corrispondenza, ottimo, altrimenti va bene lo stesso.”

SELECT eroi.nome, missioni.nome_missione
FROM eroi
FULL OUTER JOIN missioni
ON eroi.missione_id = missioni.id;

Con questa query, ottieni tutti gli eroi e tutte le missioni, anche se alcuni eroi sono in attesa di una grande avventura e alcune missioni stanno cercando disperatamente un eroe. Perfetto per un’agenzia di matchmaking fantasy!

Utilizzare il JOIN con Più Tabelle

Perché fermarsi a due tabelle? A volte, SQL vuole fare da Cupido per più tabelle contemporaneamente. Quando devi unire tre o più tabelle, PostgreSQL è più che felice di aiutarti. Basta continuare a concatenare i join!

SELECT eroi.nome, missioni.nome_missione, regni.nome_regno
FROM eroi
JOIN missioni ON eroi.missione_id = missioni.id
JOIN regni ON eroi.regno_id = regni.id;

In questo caso, stai combinando eroi, le loro missioni e i regni a cui appartengono — come organizzare un grande evento reale con tutti gli inviti correttamente spediti!

Self Join — Quando Le Tabelle Fanno Un Po’ di Autoconversazione

Un self join è come SQL che parla da solo. Unisci una tabella con se stessa, di solito per confrontare le righe all’interno della stessa tabella. Immagina una tabella delle missioni in cui ogni missione ha una missione successiva — puoi utilizzare un self join per vedere quali missioni sono collegate.

SELECT m1.nome_missione AS missione_originale, m2.nome_missione AS missione_successiva
FROM missioni m1
JOIN missioni m2 ON m1.missione_successiva_id = m2.id;

Qui, PostgreSQL abbinerà ogni missione con la sua successiva, creando una bella lista di avventure epiche che si susseguono!

Cross Join — Tutti Sono Invitati!

Il cross join è l’equivalente SQL di mettere tutti in una stanza e vedere cosa succede. Combina ogni riga della tabella sinistra con ogni riga della tabella destra — e il risultato può essere… molto, molto caotico. Ottieni ogni possibile combinazione, il che può essere utile ma spesso porta a un sovraccarico di dati.

SELECT eroi.nome, armi.nome_arma
FROM eroi
CROSS JOIN armi;

Ora hai ogni eroe che brandisce ogni possibile arma — il sogno di ogni guerriero, o il peggior incubo per il tuo database!

Cosa Abbiamo Imparato Oggi?

Oggi abbiamo imparato come unire le tabelle e creare relazioni armoniose attraverso:

  • Inner join: Dove solo i match perfetti sopravvivono.
  • Left e right join: Perché a volte è bello fare preferenze.
  • Full outer join: Quando vuoi includere tutti, anche quelli che non si adattano.
  • Self join: Quando le tabelle vogliono fare due chiacchiere con se stesse.
  • Cross join: Perché a volte il caos è divertente!

Cosa Ci Aspetta?

Nella prossima lezione ci immergeremo nelle Window Functions — un modo elegante per calcolare totali parziali, classifiche e molto altro! Preparati a dare un upgrade alle tue query, come un vero trattamento regale.


Adesso vai, e che i tuoi join uniscano sempre le tabelle giuste!