🧚 Ascolta! Beekeeper Studio è una GUI per database veloce, moderna e open source Scarica
13 maggio 2025 Di Matthew Rathbone

Se hai mai provato a estrarre dati da più tabelle MySQL e ti sei sentito perso, non sei il solo. Le join sono uno di quei concetti che all'inizio sembrano intimidatori, ma che diventano incredibilmente potenti una volta che ci prendi la mano.

Pensa alle join come a un modo per dire a MySQL “ehi, voglio prendere i dati da questa tabella E da quella tabella, ma solo dove certe condizioni corrispondono.” Una volta capiti gli schemi di base, combinerai dati come un professionista.

🔖 Riferimento rapido: Ti serve una consultazione veloce? Dai un'occhiata al nostro cheat sheet sulle JOIN SQL con tutti i tipi di JOIN, diagrammi visivi ed esempi di codice in un unico posto.

L'albero genealogico delle join

In sostanza, una join ti permette di combinare righe di tabelle diverse quando hanno qualcosa in comune. È come presentare due gruppi di amici che hanno conoscenze in comune.

Ecco i tipi di join che vedremo:

  • INNER JOIN - Mostrami solo i record presenti in entrambe le tabelle
  • LEFT JOIN - Mostrami tutto dalla tabella di sinistra, più le corrispondenze da quella di destra
  • RIGHT JOIN - L'opposto della LEFT JOIN (anche se, sinceramente, quasi tutti preferiscono invertire le tabelle)
  • FULL JOIN - Tutto da entrambe le tabelle (MySQL ci fa faticare un po' per questa)
  • CROSS JOIN - Ogni combinazione possibile (usala con cautela!)
  • SELF JOIN - Quando una tabella deve parlare con se stessa

INNER JOIN - La perfezionista

Diagramma di Venn della INNER JOIN che mostra solo l'area di sovrapposizione tra due tabelle

La INNER JOIN è esigente. Ti restituisce solo le righe in cui entrambe le tabelle hanno dati corrispondenti. Pensala come l'intersezione in un diagramma di Venn.

Esempio:

Usiamo due semplici tabelle, employees e departments:

-- Employees Table
+----+----------+-------------+
| id | name     | department_id|
+----+----------+-------------+
| 1  | Alice    | 1           |
| 2  | Bob      | 2           |
| 3  | Charlie  | NULL        |
+----+----------+-------------+

-- Departments Table
+----+-------------+
| id | department  |
+----+-------------+
| 1  | HR          |
| 2  | IT          |
+----+-------------+

Query INNER JOIN:

SELECT employees.name, departments.department
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

Risultato:

+-------+------------+
| name  | department |
+-------+------------+
| Alice | HR         |
| Bob   | IT         |
+-------+------------+

LEFT JOIN - L'inclusiva

Diagramma di Venn della LEFT JOIN che mostra l'intera tabella di sinistra più l'area di sovrapposizione

La LEFT JOIN è più generosa della INNER JOIN. Dice “voglio tutto dalla tabella di sinistra e, se c'è qualcosa di corrispondente nella tabella di destra, ottimo! Altrimenti, ci metto NULL.”

Nota come questa volta compare anche Charlie, pur non avendo un reparto:

Query LEFT JOIN:

SELECT employees.name, departments.department
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

Risultato:

+---------+------------+
| name    | department |
+---------+------------+
| Alice   | HR         |
| Bob     | IT         |
| Charlie | NULL       |
+---------+------------+

RIGHT JOIN - Il rovescio della medaglia

Diagramma di Venn della RIGHT JOIN che mostra l'intera tabella di destra più l'area di sovrapposizione

La RIGHT JOIN è semplicemente una LEFT JOIN con le tabelle invertite. La maggior parte degli sviluppatori la evita e riorganizza invece la clausola FROM: così è meno confusionario.

Query RIGHT JOIN:

SELECT employees.name, departments.department
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

Risultato:

+-------+------------+
| name  | department |
+-------+------------+
| Alice | HR         |
| Bob   | IT         |
+-------+------------+

FULL JOIN - L'approccio “metti dentro tutto”

Diagramma di Venn della FULL OUTER JOIN che mostra entrambe le tabelle per intero

Qui MySQL diventa un po' fastidioso: non ha una FULL JOIN integrata. Ma possiamo simularla con un trucco basato su UNION:

Simulazione di FULL JOIN:

SELECT employees.name, departments.department
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
UNION
SELECT employees.name, departments.department
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

Risultato:

+---------+------------+
| name    | department |
+---------+------------+
| Alice   | HR         |
| Bob     | IT         |
| Charlie | NULL       |
+---------+------------+

CROSS JOIN - La creatrice di caos

Diagramma della CROSS JOIN che mostra tutte le combinazioni possibili tra le tabelle

La CROSS JOIN è come quell'amico che a una festa vuole presentare tutti a tutti. Abbina ogni singola riga della prima tabella con ogni singola riga della seconda. Con 3 dipendenti e 2 reparti, otteniamo 6 combinazioni:

Query CROSS JOIN:

SELECT employees.name, departments.department
FROM employees
CROSS JOIN departments;

Risultato:

+-------+------------+
| name  | department |
+-------+------------+
| Alice | HR         |
| Alice | IT         |
| Bob   | HR         |
| Bob   | IT         |
| Charlie | HR       |
| Charlie | IT       |
+-------+------------+

SELF JOIN - L'introspettiva

Le self join si usano quando una tabella fa riferimento a se stessa. L'esempio classico è una tabella dei dipendenti in cui alcuni dipendenti gestiscono altri dipendenti.

Esempio:

Ecco una tabella managers in cui mgr_id punta a un'altra riga della stessa tabella:

-- Managers Table
+----+----------+--------+
| id | name     | mgr_id |
+----+----------+--------+
| 1  | Tom      | NULL   |
| 2  | Jerry    | 1      |
| 3  | Spike    | 1      |
+----+----------+--------+

Query SELF JOIN:

SELECT m1.name AS manager, m2.name AS employee
FROM managers m1
LEFT JOIN managers m2 ON m1.id = m2.mgr_id;

Risultato:

+---------+----------+
| manager | employee |
+---------+----------+
| Tom     | Jerry    |
| Tom     | Spike    |
| Jerry   | NULL     |
| Spike   | NULL     |
+---------+----------+

In conclusione

All'inizio le join possono sembrare travolgenti, ma in realtà sono solo modi diversi per dire “mostrami i dati di più tabelle secondo queste regole.” Inizia con INNER e LEFT join: copriranno il 90% di ciò che ti serve.

Il modo migliore per prendere confidenza con le join è fare pratica con i tuoi dati. Crea qualche tabella di prova, inserisci dei dati di esempio e inizia a sperimentare. In poco tempo farai join a destra e a sinistra (gioco di parole voluto).

E ricorda: se la tua join restituisce molte più righe del previsto, probabilmente hai fatto una CROSS JOIN per sbaglio. Ci siamo passati tutti!

Beekeeper Studio è una GUI per database gratuita & open source

Il miglior strumento per query & editor SQL che abbia mai usato. Offre tutto ciò che mi serve per gestire il mio database. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio è veloce, intuitivo e facile da usare. Beekeeper supporta tantissimi database e funziona alla grande su Windows, Mac e Linux.

La versione Linux di Beekeeper è completa al 100%, senza tagli e senza compromessi sulle funzionalità.

Cosa dicono gli utenti di Beekeeper Studio

★★★★★
"Beekeeper Studio ha sostituito completamente il mio vecchio workflow SQL. È veloce, intuitivo e rende di nuovo piacevole lavorare con i database."
— Alex K., Database Developer
★★★★★
"Ho provato molte GUI per database, ma Beekeeper trova il perfetto equilibrio tra funzionalità e semplicità. Funziona e basta."
— Sarah M., Full Stack Engineer

Pronto a migliorare il tuo workflow SQL?

download Scarica gratis