> For the complete documentation index, see [llms.txt](https://learn.ziomark.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.ziomark.xyz/sql/parte-3-join-in-sql.md).

# Parte 3: Join in SQL

Benvenuti alla terza lezione del nostro corso di SQL su ZioMark's HUB! Dopo aver esplorato le query di selezione e le funzioni aggregato, questa lezione si concentrerà sulle diverse tecniche di join in SQL, un aspetto fondamentale per lavorare con database relazionali e combinare dati da più tabelle.

### Che Cos'è un Join?

Un join SQL è un'operazione che combina le righe da due o più tabelle, basandosi su una colonna relazionata tra di loro. Ci sono diversi tipi di join che possono essere utilizzati a seconda delle esigenze specifiche della query.

### Tipi di Join

1. **INNER JOIN**: Restituisce le righe quando c'è almeno una corrispondenza in entrambe le tabelle.
2. **LEFT JOIN (o LEFT OUTER JOIN)**: Restituisce tutte le righe dalla tabella a sinistra, e le righe corrispondenti dalla tabella a destra. Se non c'è corrispondenza, il risultato è `NULL` sul lato destro.
3. **RIGHT JOIN (o RIGHT OUTER JOIN)**: Restituisce tutte le righe dalla tabella a destra, e le righe corrispondenti dalla tabella a sinistra. Se non c'è corrispondenza, il risultato è `NULL` sul lato sinistro.
4. **FULL JOIN (o FULL OUTER JOIN)**: Restituisce le righe quando c'è una corrispondenza in una delle tabelle.

### Sintassi di Base dei Join

```sql
SELECT column_name(s)
FROM table1
[TYPE OF JOIN] JOIN table2
ON table1.column_name = table2.column_name;
```

### Esempio Pratico

Immaginiamo di avere due tabelle, `Employees` e `Departments`, dove gli impiegati sono associati ai loro rispettivi dipartimenti attraverso un ID di dipartimento.

#### Tabella `Employees`

| EmployeeID | EmployeeName | DepartmentID |
| ---------- | ------------ | ------------ |
| 1          | Alice        | 1            |
| 2          | Bob          | 2            |
| 3          | Charlie      | 1            |

#### Tabella `Departments`

| DepartmentID | DepartmentName |
| ------------ | -------------- |
| 1            | HR             |
| 2            | IT             |

#### Query con INNER JOIN

```sql
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
INNER JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
```

Questo restituirà:

| EmployeeName | DepartmentName |
| ------------ | -------------- |
| Alice        | HR             |
| Bob          | IT             |
| Charlie      | HR             |

### Esercizio Pratico

Con le tabelle `Employees` e `Departments` fornite, prova a:

1. Eseguire un LEFT JOIN per visualizzare tutti i dipendenti insieme ai nomi dei loro dipartimenti.
2. Eseguire un RIGHT JOIN per visualizzare tutti i dipartimenti, inclusi quelli senza dipendenti.

#### Soluzioni

1. **LEFT JOIN**:

```sql
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
```

2. **RIGHT JOIN**:

```sql
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Departments
LEFT JOIN Employees
ON Departments.DepartmentID = Employees.DepartmentID;
```

### Conclusione

Ora dovresti avere una solida comprensione di come i diversi tipi di join funzionino e come possono essere utilizzati per combinare dati in modi potenti e flessibili. Queste competenze ti saranno utili per analizzare e gestire efficacemente grandi quantità di dati relazionali.
