SELECT *
FROM indirizzi
JOIN città
ON indirizzi.città_id = città.id;
Selezioniamo solo le colonne che ci interessano:
SELECT indirizzi.destinatario, città.nome, città.cap, città.provincia
FROM indirizzi
JOIN città
ON indirizzi.città_id = città.id;
Se non c'è il rischio di fare confusione con nomi di colonna uguali nelle due tabelle, possiamo anche omettere i nomi delle tabelle (lasciamo città.nome perché la rende più leggibile):
SELECT destinatario, città.nome, cap, provincia
FROM indirizzi
JOIN città
ON indirizzi.città_id = città.id;
Aliasing
Con l'aliasing possiamo abbreviare le query
SELECT destinatario, c.nome, cap, provincia
FROM indirizzi AS i
JOIN città AS c
ON i.città_id = c.id;
Aliasing di colonne
Può far comodo cambiare il nome di una colonna nella tabella risultante:
SELECT destinatario, città.nome AS città, cap, provincia
FROM indirizzi
JOIN città
ON indirizzi.città_id = città.id;
Nota: la città di Roncade non compare nella tabella, perché nessun indirizzo fa riferimento ad essa.
Tipi di Join
INNER JOIN (default): intersezione, righe che hanno valori in comune nella condizione
LEFT JOIN: prende tutte le righe della tabella di sinistra e le collega a quelle di destra; se non c'è una corrispondenza le colonne mancanti vengono riempite con NULL
RIGHT JOIN: prende tutte le righe della tabella di destra, e se non c'è una corrispondenza a sinistra riempie con NULL
FULL JOIN: è una combinazione di LEFT e RIGHT, prende tutte le righe di entrambe le tabelle, e dove non c'è una corrispondenza riempie con NULL
CROSS JOIN: incrocia tutte le possibili combinazioni della tabella di sinistra con quella di destra (va omessa la clausola ON)