In un sistema di gestione di database re­la­zio­na­li è possibile con­fron­ta­re i record di diverse tabelle fra di loro, con­sen­ten­do di creare col­le­ga­men­ti ed estrarre i valori cor­ri­spon­den­ti da due tabelle. Questo compito in MariaDB è svolto da JOIN. L’istru­zio­ne, usata in com­bi­na­zio­ne con SELECT, può essere suddivisa in diverse categorie. Qui ti pre­sen­tia­mo più det­ta­glia­ta­men­te INNER JOIN, LEFT OUTER JOIN e RIGHT OUTER JOIN.

Sintassi e fun­zio­na­men­to

Per darti una visione d’insieme delle diverse istru­zio­ni 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 con­si­de­ra­re. Per il se­gna­po­sto “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 con­fron­ta­te con tutte le righe della seconda tabella. I risultati cor­ri­spon­den­ti (ovvero che sono presenti in entrambe le tabelle) vengono riportati insieme in una tabella dei risultati. Le voci che non cor­ri­spon­do­no sono invece tra­la­scia­te.

Managed Database Services
Con­cen­tra­ti sul tuo progetto, noi pensiamo al resto
  • Partner IONOS Cloud
  • Soluzioni fles­si­bi­li e su misura
  • Data center situati in Europa

Esempio di INNER JOIN in MariaDB

Per spiegare come funziona INNER JOIN in MariaDB ri­cor­ria­mo a un semplice esempio. Partiamo da un database che contiene due tabelle. La prima tabella è de­no­mi­na­ta “Li­sta­Clien­ti”, la seconda “Ordini”. Creiamo “Li­sta­Clien­ti” con MariaDB CREATE TABLE. Contiene le colonne “Nu­me­ro­Clien­te”, “Cognome”, “Nome”, “Città” e “Da­ta­Crea­zio­ne”. 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 uti­liz­zan­do 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 “Nu­me­roOr­di­ne”, “Nu­me­roAr­ti­co­lo”, “No­me­Clien­te” e “Da­taOr­di­ne”. 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 cor­ri­spon­do­no, vengono acquisiti. Siccome i clienti Ferrari e Rossi compaiono in entrambe le tabelle, il risultato sarà il seguente:

Nu­me­ro­Clien­te No­me­Clien­te Nu­me­roOr­di­ne Nu­me­roAr­ti­co­lo
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 dif­fe­ren­za di INNER JOIN, però, vengono acquisiti tutti i record dalla prima tabella a sinistra (nel nostro esempio “Li­sta­Clien­ti”), ma solo i record adatti dalla seconda tabella a destra (“Ordini”). Se non c’è una cor­ri­spon­den­za 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:

No­me­Clien­te Nu­me­roAr­ti­co­lo
Russo NULL
Rossi 191
Ferrari 332
Gallo NULL
Martini NULL

RIGHT OUTER JOIN

Esat­ta­men­te al contrario funziona RIGHT OUTER JOIN in MariaDB. Questa volta i dati della seconda tabella a destra vengono collegati con i valori cor­ri­spon­den­ti della prima tabella a sinistra. In assenza di una cor­ri­spon­den­za, 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 pre­sen­te­rà di con­se­guen­za così:

No­me­Clien­te Nu­me­roAr­ti­co­lo
NULL 247
Ferrari 332
NULL 247
Rossi 191
NULL 499
Consiglio

Nella nostra Digital Guide trovi tante utili guide e spie­ga­zio­ni su MariaDB. Ad esempio trovi un confronto tra MariaDB e MySQL e tutto quello che devi sapere sull’in­stal­la­zio­ne di MariaDB. Puoi anche scoprire come collegare i programmi Python con MariaDB e molto altro.

Vai al menu prin­ci­pa­le