🧚 Ascolta! Beekeeper Studio è una GUI per database veloce, moderna e open source Scarica
2 gennaio 2024 Di Matthew Rathbone

Capire SQL spesso significa porsi le domande giuste. Quando lavori con dati distribuiti su più tabelle, il full outer join diventa davvero utile. Anche se è piuttosto comune in alcuni sistemi di gestione di database, il concetto di FULL OUTER JOIN è un po' più complicato in MySQL. Perché? Perché non è supportato nativamente. Interessante, vero? Ma aspetta, c'è una soluzione alternativa!

In questo tutorial esploriamo nel dettaglio come implementare un full outer join in MySQL. Allacciate le cinture: stiamo per tuffarci in un mare di esempi di codice.

🔖 Riferimento rapido: Ti serve un riepilogo veloce di tutti i tipi di JOIN? Dai un'occhiata al nostro SQL JOIN Cheat Sheet con diagrammi visivi ed esempi di codice.

Cos'è un Full Outer Join?

Prima di iniziare, definiamo cos'è un FULL OUTER JOIN. In SQL, un full outer join combina l'effetto di un left outer join e di un right outer join. In altre parole, recupera i record con valori corrispondenti in entrambe le tabelle, oltre a tutti i record di entrambe le tabelle i cui valori non compaiono nell'altra.

Visualizzazione del Full Outer Join

Ecco un esempio. Supponiamo di avere due tabelle, Employees e Departments.

Tabella Employees:

id name
1 Alice
2 Bob
3 Charlie

Tabella Departments:

id department
2 HR
3 IT
4 Marketing

Usando la query FULL OUTER JOIN:

SELECT * FROM Employees
FULL OUTER JOIN Departments ON Employees.id = Departments.id;

Il risultato sarà:

Employees.id Employees.name Departments.id Departments.department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Questo output combina tutti i record di Employees e Departments. Include:

  • I record con valori id corrispondenti in entrambe le tabelle (Bob e Charlie).
  • I record di Employees senza un record corrispondente in Departments (Alice).
  • I record di Departments senza un record corrispondente in Employees (Marketing).

Per quanto utile, questa sintassi non è supportata direttamente in MySQL. Quindi, come ne usciamo? Scopriamolo.

Simulare un Full Outer Join in MySQL

Come detto sopra, MySQL non supporta esplicitamente la parola chiave FULL OUTER JOIN. Tuttavia, possiamo comunque ottenere il risultato desiderato combinando LEFT JOIN e UNION

L'idea per simulare un full outer join in MySQL prevede due passaggi:

  • Esegui un LEFT JOIN sulla prima tabella per ottenere tutti i suoi record, insieme ai record corrispondenti della seconda tabella.
  • Usa UNION per combinare i risultati con quelli di un RIGHT JOIN, così da ottenere tutti i record della seconda tabella insieme ai record corrispondenti della prima.

Ecco come funziona ogni componente:

Left Join:
Visualizzazione del Left Join

Right Join:
Visualizzazione del Right Join

Esempio di Full Outer Join in MySQL

Ecco un esempio della soluzione alternativa usando gli stessi dati di prima

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Employees
LEFT JOIN 
    Departments ON Employees.id = Departments.id

UNION

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Departments
RIGHT JOIN 
    Employees ON Departments.id = Employees.id;

Questa query è composta da due parti:

  1. Un LEFT JOIN per ottenere tutti i record della tabella Employees e i record corrispondenti della tabella Departments.
  2. Un RIGHT JOIN per ottenere tutti i record della tabella Departments e i record corrispondenti della tabella Employees.

UNION combina i risultati di queste due query eliminando le righe duplicate.

Con le stesse tabelle di esempio, il risultato sarà:

Employees_id name Departments_id department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Questo output, come il FULL OUTER JOIN in SQL, combina tutti i record di Employees e Departments.

UNION filtra automaticamente i duplicati

Nel caso specifico del nostro esempio con le tabelle Employees e Departments, la UNION usata nella soluzione alternativa di MySQL per un FULL OUTER JOIN non produrrà duplicati. Questo perché l'operatore UNION elimina automaticamente le righe duplicate dal risultato.

Per chiarire, vediamo come funziona UNION in questo contesto:

  • La prima parte della query (il LEFT JOIN) recupera tutti i record della tabella Employees e i record corrispondenti della tabella Departments. Questo include le righe con valori id corrispondenti in entrambe le tabelle e le righe di Employees senza corrispondenza in Departments.

  • La seconda parte della query (il RIGHT JOIN) recupera tutti i record della tabella Departments e i record corrispondenti della tabella Employees. Questo include le righe con valori id corrispondenti in entrambe le tabelle e le righe di Departments senza corrispondenza in Employees.

Poiché UNION rimuove i duplicati, le righe con valori id corrispondenti (quelle che comparirebbero sia nei risultati del LEFT JOIN sia in quelli del RIGHT JOIN) appariranno una sola volta nel risultato finale.

In sintesi, usare UNION in questo contesto garantisce che ogni combinazione unica di dati di Employees e Departments compaia una sola volta nel risultato, imitando così il comportamento di un FULL OUTER JOIN senza duplicati.

Fai pratica in Beekeeper Studio

Spero che questo tutorial sul full outer join in MySQL ti sia stato utile. Nei prossimi articoli continueremo a esplorare altre funzionalità avanzate di MySQL, condividendo altri esempi di codice e approfondendo perché e come funzionano. Nel frattempo, continua ad allenare le tue competenze SQL, magari usando Beekeeper Studio.

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