JOIN per MariaDB: unire record di più tabelle

In un sistema di gestione di database relazionali è possibile confrontare i record di diverse tabelle fra di loro, consentendo di creare collegamenti ed estrarre i valori corrispondenti da due tabelle. Questo compito in MariaDB è svolto da JOIN. L’istruzione, usata in combinazione con SELECT, può essere suddivisa in diverse categorie. Qui ti presentiamo più dettagliatamente INNER JOIN, LEFT OUTER JOIN e RIGHT OUTER JOIN.

Sintassi e funzionamento

Per darti una visione d’insieme delle diverse istruzioni JOIN in MariaDB iniziamo dalla sintassi di base. Per INNER JOIN è la seguente:

SELECT colonna(e)
FROM tabella_1
INNER JOIN tabella_2
ON tabella_1ªcolonna = tabella_2ªcolonna;
sql

Con SELECT seleziona la colonna (o le colonne) da considerare. Per il segnaposto “tabella_1” inserisci la prima tabella e al posto di “tabella_2” la seconda tabella da collegare con la prima. Con INNER JOIN tutte le righe della prima tabella vengono confrontate con tutte le righe della seconda tabella. I risultati corrispondenti (ovvero che sono presenti in entrambe le tabelle) vengono riportati insieme in una tabella dei risultati. Le voci che non corrispondono sono invece tralasciate.

Managed Database Services
Concentrati sul tuo progetto, noi pensiamo al resto
  • Partner IONOS Cloud
  • Soluzioni flessibili e su misura
  • Data center situati in Europa

Esempio di INNER JOIN in MariaDB

Per spiegare come funziona INNER JOIN in MariaDB ricorriamo a un semplice esempio. Partiamo da un database che contiene due tabelle. La prima tabella è denominata “ListaClienti”, la seconda “Ordini”. Creiamo “ListaClienti” con MariaDB CREATE TABLE. Contiene le colonne “NumeroCliente”, “Cognome”, “Nome”, “Città” e “DataCreazione”. Il codice si presenta come segue:

CREATE TABLE ListaClienti (
	NumeroCliente INT PRIMARY KEY,
	Cognome VARCHAR(50),
	Nome VARCHAR(50),
	Città VARCHAR(50),
	Data di creazione DATE
);
sql

Riempiamo ora la tabella con alcuni valori utilizzando INSERT INTO:

INSERT INTO ListaClienti VALUES
(1, 'Russo', 'Martina', 'Roma', '2022-07-19'),
(2, 'Rossi', 'Mario', 'Milano', '2023-03-03'),
(3, 'Ferrari', 'Pietro', 'Milano', '2023-07-09'),
(4, 'Gallo', 'Sara', 'Napoli', '2023-12-10'),
(5, 'Martini', 'Lisa', 'Roma', '2024-01-17');
sql

Creiamo poi la tabella “Ordini”. Qui sono contenute le colonne “NumeroOrdine”, “NumeroArticolo”, “NomeCliente” e “DataOrdine”. Il codice si presenta come segue:

CREATE TABLE Ordini (
	NumeroOrdine INT AUTO_INCREMENT PRIMARY KEY,
	NumeroArticolo INT,
	NomeCliente VARCHAR(50),
	DataOrdine DATE
);
sql

Riempiamo anche questa tabella con valori di esempio:

INSERT INTO ordini VALUES
(101, 247, 'Mancini', '2024-02-20'),
(102, 332, 'Ferrari', '2024-03-03'),
(103, 247, 'Costa', '2024-03-09'),
(104, 191, 'Rossi', '2024-03-17'),
(105, 499, 'Albertini', '2024-03-17');
sql

Ora usiamo INNER JOIN per MariaDB per filtrare tutti quei clienti che compaiono nella lista clienti e hanno fatto un ordine che sono elencati nella tabella “Ordini”. Il codice si presenta come segue:

SELECT ListaClienti.NumeroCliente, ListaClienti.Cognome, Ordini.NumeroOrdine, Ordini.NumeroArticolo
FROM ListaClienti
INNER JOIN Ordini
ON ListaClienti.Cognome = Ordini.NomeCliente;
sql

Qui poniamo l’accento sui cognomi della lista clienti e sui nomi dei clienti negli ordini. Se questi valori corrispondono, vengono acquisiti. Siccome i clienti Ferrari e Rossi compaiono in entrambe le tabelle, il risultato sarà il seguente:

NumeroCliente NomeCliente NumeroOrdine NumeroArticolo
3 Ferrari 102 332
2 Rossi 104 191

LEFT OUTER JOIN

LEFT OUTER JOIN in MariaDB funziona secondo un principio analogo e usa anche una sintassi pressoché identica. A differenza di INNER JOIN, però, vengono acquisiti tutti i record dalla prima tabella a sinistra (nel nostro esempio “ListaClienti”), ma solo i record adatti dalla seconda tabella a destra (“Ordini”). Se non c’è una corrispondenza nella seconda tabella, il valore viene indicato con NULL. Per il nostro esempio sopra, il comando si presenta come segue:

SELECT ListaClienti.Cognome, Ordini.NumeroArticolo
FROM ListaClienti
LEFT OUTER JOIN Ordini
ON ListaClienti.Cognome = Ordini.NomeCliente;
sql

In questo modo otteniamo il risultato seguente:

NomeCliente NumeroArticolo
Russo NULL
Rossi 191
Ferrari 332
Gallo NULL
Martini NULL

RIGHT OUTER JOIN

Esattamente al contrario funziona RIGHT OUTER JOIN in MariaDB. Questa volta i dati della seconda tabella a destra vengono collegati con i valori corrispondenti della prima tabella a sinistra. In assenza di una corrispondenza, il valore resta NULL. Ne risulta il seguente codice:

SELECT ListaClienti.Cognome, Ordini.NumeroArticolo
FROM ListaClienti
RIGHT OUTER JOIN Ordini
ON ListaClienti.Cognome = Ordini.NomeCliente;
sql

L’output si presenterà di conseguenza così:

NomeCliente NumeroArticolo
NULL 247
Ferrari 332
NULL 247
Rossi 191
NULL 499
Consiglio

Nella nostra Digital Guide trovi tante utili guide e spiegazioni su MariaDB. Ad esempio trovi un confronto tra MariaDB e MySQL e tutto quello che devi sapere sull’installazione di MariaDB. Puoi anche scoprire come collegare i programmi Python con MariaDB e molto altro.

Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top