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;
sqlCon 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.
- 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
);
sqlRiempiamo 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');
sqlCreiamo 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
);
sqlRiempiamo 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');
sqlOra 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;
sqlQui 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;
sqlIn 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;
sqlL’output si presenterà di conseguenza così:
NomeCliente | NumeroArticolo |
---|---|
NULL | 247 |
Ferrari | 332 |
NULL | 247 |
Rossi | 191 |
NULL | 499 |
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.