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
id | nome | cognome |
1 | mario | rossi |
2 | michele | falco |
3 | rosario | fazio |
Tabella email
id | id_cliente | |
1 | mario@email.it | 1 |
2 | rosario@gmail.com | 3 |
3 | michele@live.eu | 2 |
Tabella phones
id | telefono | id_cliente |
1 | 3334441155 | 3 |
2 | 1112227788 | 1 |
3 | 4448889966 | 2 |
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
mario | rossi | mario@email.it | 1112227788 |
michele | falco | michele@live.eu | 4448889966 |
rosario | fazio | rosario@gmail.com | 3334441155 |
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
mario | rossi | mario@email.it | 1112227788 |
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.