Unire le tabelle è uno dei concetti più importanti in SQL Server: ti permette di combinare dati da più tabelle per creare report e analisi significativi. Che tu stia costruendo report complessi o facendo analisi dei dati, capire come funzionano le join è essenziale per qualsiasi sviluppatore SQL.
In questa guida completa vedremo ogni tipo di join in SQL Server con esempi pratici, spiegazioni chiare e scenari reali.
🔖 Riferimento rapido: Ti serve una consultazione veloce? Dai un'occhiata al nostro SQL JOIN Cheat Sheet con tutti i tipi di JOIN, diagrammi visivi ed esempi di codice in un unico posto.
Capire le join in SQL Server
Le join in SQL Server sono operazioni che combinano le righe di due o più tabelle in base a una colonna correlata tra loro. I tipi di join più comuni sono:
- INNER JOIN: restituisce solo i record corrispondenti in entrambe le tabelle
- LEFT JOIN: restituisce tutti i record della tabella di sinistra, più i record corrispondenti della tabella di destra
- RIGHT JOIN: restituisce tutti i record della tabella di destra, più i record corrispondenti della tabella di sinistra
- FULL OUTER JOIN: restituisce tutti i record quando c'è una corrispondenza in una delle due tabelle
Preparare i dati di esempio
Per i nostri esempi useremo due semplici tabelle che rappresentano uno scenario aziendale comune:
Tabella Orders:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
Product NVARCHAR(50),
OrderDate DATE
);
INSERT INTO Orders VALUES
(1, 1, 'Laptop', '2024-01-15'),
(2, 2, 'Mouse', '2024-01-16'),
(3, 3, 'Keyboard', '2024-01-17');
| OrderID | CustomerID | Product | OrderDate |
|---|---|---|---|
| 1 | 1 | Laptop | 2024-01-15 |
| 2 | 2 | Mouse | 2024-01-16 |
| 3 | 3 | Tastiera | 2024-01-17 |
Tabella Customers:
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name NVARCHAR(50),
City NVARCHAR(50)
);
INSERT INTO Customers VALUES
(1, 'John Doe', 'New York'),
(2, 'Jane Smith', 'Los Angeles'),
(4, 'Alex Johnson', 'Chicago');
| CustomerID | Name | City |
|---|---|---|
| 1 | John Doe | New York |
| 2 | Jane Smith | Los Angeles |
| 4 | Alex Johnson | Chicago |
INNER JOIN
Una INNER JOIN restituisce solo le righe che hanno un valore corrispondente in entrambe le tabelle. È il tipo di join più usato ed è perfetta quando vuoi vedere solo i record presenti in entrambe le tabelle.
Quando usare INNER JOIN
- Quando ti servono dati presenti in entrambe le tabelle
- Per report che mostrano relazioni complete
- Quando vuoi escludere i record incompleti
Esempio di query SQL
SELECT
o.OrderID,
c.Name,
c.City,
o.Product,
o.OrderDate
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;
Risultato
| OrderID | Name | City | Product | OrderDate |
|---|---|---|---|---|
| 1 | John Doe | New York | Laptop | 2024-01-15 |
| 2 | Jane Smith | Los Angeles | Mouse | 2024-01-16 |
Punti chiave:
- Vengono restituite solo 2 righe (OrderID 3 è escluso perché CustomerID 3 non esiste nella tabella Customers)
- Nel risultato compaiono solo i clienti che hanno effettuato ordini
- La condizione di join (
o.CustomerID = c.CustomerID) determina quali righe corrispondono
LEFT JOIN
Una LEFT JOIN (chiamata anche LEFT OUTER JOIN) restituisce tutte le righe della tabella di sinistra, più le eventuali righe corrispondenti della tabella di destra. Quando non c'è corrispondenza, le colonne della tabella di destra mostrano valori NULL.
Quando usare LEFT JOIN
- Quando ti servono tutti i record della tabella principale (tabella di sinistra)
- Per report che evidenziano lacune nei dati o relazioni mancanti
- Quando vuoi trovare i record senza corrispondenza
Esempio di query SQL
SELECT
o.OrderID,
c.Name,
c.City,
o.Product,
o.OrderDate
FROM Orders o
LEFT JOIN Customers c ON o.CustomerID = c.CustomerID;
Risultato
| OrderID | Name | City | Product | OrderDate |
|---|---|---|---|---|
| 1 | John Doe | New York | Laptop | 2024-01-15 |
| 2 | Jane Smith | Los Angeles | Mouse | 2024-01-16 |
| 3 | NULL | NULL | Tastiera | 2024-01-17 |
Punti chiave:
- Tutti e 3 gli ordini compaiono nel risultato (vengono mantenuti tutti i dati della tabella di sinistra)
- OrderID 3 mostra NULL per le informazioni sul cliente perché CustomerID 3 non esiste nella tabella Customers
- Utile per individuare ordini senza dati cliente validi
RIGHT JOIN
Una RIGHT JOIN (chiamata anche RIGHT OUTER JOIN) restituisce tutte le righe della tabella di destra, più le eventuali righe corrispondenti della tabella di sinistra. Quando non c'è corrispondenza, le colonne della tabella di sinistra mostrano valori NULL.
Quando usare RIGHT JOIN
- Quando ti servono tutti i record della tabella di destra
- Meno comune della LEFT JOIN (di solito puoi riscriverla come LEFT JOIN)
- Utile quando i dati “principali” sono nella seconda tabella
Esempio di query SQL
SELECT
o.OrderID,
c.Name,
c.City,
o.Product,
o.OrderDate
FROM Orders o
RIGHT JOIN Customers c ON o.CustomerID = c.CustomerID;
Risultato
| OrderID | Name | City | Product | OrderDate |
|---|---|---|---|---|
| 1 | John Doe | New York | Laptop | 2024-01-15 |
| 2 | Jane Smith | Los Angeles | Mouse | 2024-01-16 |
| NULL | Alex Johnson | Chicago | NULL | NULL |
Punti chiave:
- Tutti e 3 i clienti compaiono nel risultato (vengono mantenuti tutti i dati della tabella di destra)
- Alex Johnson mostra NULL per le informazioni sull'ordine perché non ha effettuato alcun ordine
- Utile per individuare i clienti che non hanno fatto acquisti
FULL OUTER JOIN
Una FULL OUTER JOIN (o semplicemente FULL JOIN) restituisce tutte le righe quando c'è una corrispondenza in una delle due tabelle. Combina i risultati di LEFT e RIGHT JOIN, mostrando valori NULL dove non c'è corrispondenza da una delle due parti.
Quando usare FULL OUTER JOIN
- Quando ti servono tutti i record di entrambe le tabelle
- Per un'analisi completa dei dati
- Quando vuoi individuare tutte le relazioni e le lacune tra le tabelle
Esempio di query SQL
SELECT
o.OrderID,
c.Name,
c.City,
o.Product,
o.OrderDate
FROM Orders o
FULL OUTER JOIN Customers c ON o.CustomerID = c.CustomerID;
Risultato
| OrderID | Name | City | Product | OrderDate |
|---|---|---|---|---|
| 1 | John Doe | New York | Laptop | 2024-01-15 |
| 2 | Jane Smith | Los Angeles | Mouse | 2024-01-16 |
| 3 | NULL | NULL | Tastiera | 2024-01-17 |
| NULL | Alex Johnson | Chicago | NULL | NULL |
Punti chiave:
- Nel risultato compaiono tutte e 4 le righe possibili
- Mostra sia gli ordini orfani (OrderID 3) sia i clienti senza ordini (Alex Johnson)
- Combina la visione completa di LEFT e RIGHT JOIN
- Il quadro più completo della relazione tra le tabelle
Punti chiave
Capire le join in SQL Server è essenziale per interrogare i database in modo efficace. Ecco un riepilogo rapido:
| Tipo di join | Restituisce | Caso d'uso |
|---|---|---|
| INNER JOIN | Solo i record corrispondenti | La più comune; quando ti servono relazioni complete |
| LEFT JOIN | Tutta la sinistra + corrispondenze a destra | Quando la tabella di sinistra è principale; trovare dati mancanti a destra |
| RIGHT JOIN | Tutta la destra + corrispondenze a sinistra | Meno comune; quando la tabella di destra è principale |
| FULL OUTER JOIN | Tutti i record di entrambe | Analisi completa; trovare tutte le relazioni e le lacune |
Best practice
-
Usa gli alias di tabella (
oper Orders,cper Customers) per rendere le query più pulite - Inizia con INNER JOIN se hai dubbi, poi adatta in base alle esigenze
- Usa LEFT JOIN più spesso di RIGHT JOIN per una migliore leggibilità
-
Specifica sempre la condizione di join con la clausola
ON - Considera le prestazioni: le join su colonne indicizzate sono più veloci
Consigli per fare pratica
Per padroneggiare le join in SQL Server:
- Inizia con piccoli dataset come gli esempi qui sopra
- Disegna diagrammi di Venn per visualizzare cosa restituisce ogni join
- Sperimenta con strutture di tabelle e relazioni diverse
- Usa SQL Server Management Studio o Beekeeper Studio per esercitarti
- Testa i casi limite come valori NULL e relazioni mancanti
Ricorda: le join sono fondamentali nei database relazionali. Una volta padroneggiate, potrai scrivere query potenti che estraggono informazioni preziose dai tuoi dati.
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.
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."
"Ho provato molte GUI per database, ma Beekeeper trova l'equilibrio perfetto tra funzionalità e semplicità. Funziona e basta."