Estrarre dati da più tabelle con JOIN SQL

In un database relazionale è possibile estrarre dati da più tabelle, tra loro in relazione, con un'unica query di SELECT.

Pubblicato da ,
Ultima modifica

In questo articolo vedremo come ottenere con un'unica query di SELECT i dati da più tabelle tra loro in relazione, per fare ciò farò un semplice esempio di tre tabelle, la tabella clienti, la tabella email che contiene gli indirizzi email dei clienti, e la tabella phones che contiene i numeri di telefono dei clienti

Tabella clienti

idnomecognome
1mariorossi
2michelefalco
3rosariofazio

Tabella email

idemailid_cliente
1mario@email.it1
2rosario@gmail.com3
3michele@live.eu2

Tabella phones

idtelefonoid_cliente
133344411553
211122277881
344488899662

la tabella email è in relazione con la tabella clienti tramite il campo id_cliente, anche la tabella phones è in relazione con la tabella clienti tramite il campo id_cliente.

Vediamo come possiamo ottenere in un'unica query il nome, cognome, email e numero di telefono di ogni cliente.

La query è la seguente

	
SELECT cl.nome, cl.cognome, em.email, ph.telefono
FROM clienti AS cl
JOIN email AS em ON em.id_cliente = cl.id
JOIN phones AS ph ON ph.id_cliente = cl.id

tramite AS assegnamo alle tabelle un alias, ma possiamo anche non usarlo, è un modo per semplificare la query qualora i nomi delle tabelle fossero troppo lunghi, in questo caso con cl identifico la tabella clienti con em la tabella email e così via, tramite JOIN andiamo ad estrarre dalla tabella email i dati con id_cliente uguale a l' id della tabella clienti, la stessa cosa per la tabella phones, eseguendo questa query otterremo questo risultato

mariorossimario@email.it1112227788
michelefalcomichele@live.eu4448889966
rosariofaziorosario@gmail.com3334441155

possiamo anche aggiungere una condizione, cioè estrarre solo i dati dell'utente con id uguale a 1

	
SELECT cl.nome, cl.cognome, em.email, ph.telefono
FROM clienti AS cl
JOIN email AS em ON em.id_cliente = cl.id
JOIN phones AS ph ON ph.id_cliente = cl.id
WHERE cl.id = 1

otterremo questo risultato

mariorossimario@email.it1112227788

In questo esempio ho utilizzato solo tre tabelle ma è ovvio che possiamo estrarre dati da più tabelle, l'importante che siamo tra loro in relazione.