Prelevare i dati dalle tabelle è una funzione basilare nell'uso dei database, tuttavia può capitare di trovarsi in situazioni che richiedano l'estrazione di dati appartenenti a tabelle diverse e relazionate, evidentemente, tra loro. A tale proposito diventano fondamentali le funzioni join.
Esistono tre tipi diversi di join in base al tipo di correlazione che c'è tra le tabelle:
- Cross join
- Inner join
- Outer join
CROSS JOIN
SELECT *
FROM viaggiatore CROSS JOIN info
Le cross join sono le più semplici ma anche le meno utilizzate: hanno lo scopo di restituire il "prodotto cartesiano" tra due tabelle(AxB). In una situazione di due tabelle A e B in cui le tabelle di A sono 2 e quelle di B sono 3 i risultati della query saranno 6:
INNER JOIN
SELECT *
FROM viaggiatore
INNER JOIN info ON viaggiatore.id = info.id
La inner join è una funzione che permette di combinare i valori di due tabelle differenti secondo il criterio da noi stabilito. E' una funzione che si occupa di confrontare ogni riga della tabella A con ogni riga della tabella B fino a restituirci tutte quelle che avranno soddisfatto il nostro "criterio" (in questo caso è che i due Id siano uguali) :
OUTER JOIN
Le outer join, come le inner join, permettono di ottenere risultati combinati tra due tabelle sulla base di un criterio con l'unica eccezione che restituiscono anche quelle righe che non hanno corrispondenze.
Le funzioni sono tre:
- Left outer join: riportano tutte le righe della tabella "di sinistra" e le corrispondenti righe della tabella di destra, riempiendo con NULL i campi della riga che non hanno corrispondenze;
- Right outer join: riportano tutte le righe della tabella "di destra" e le corrispondenti righe della tabella di sinistra, riempiendo con NULL i campi della riga che non hanno corrispondenze;
- Full outer join: Riportano tutte le righe di entrambe le tabelle riempiendo con NULL i campi della riga che non hanno corrispondenze. Non mi soffermerò su questa funzione in quanto non è supportata da tutti i database, tra cui proprio MySQL.
LEFT OUTER JOIN
SELECT *
FROM viaggiatore
LEFT OUTER JOIN info ON viaggiatore.id = info.id
Il database restituisce tutte le righe della tabella di sinistra (viaggiatore) e le righe di quella di destra(info) che hanno lo stesso id. Se, per esempio, non vi fosse stato alcun id con valore 2 nella tabella info, i campi di questa sarebbero stati riempiti con NULL.
RIGHT OUTER JOIN
SELECT *
FROM viaggiatore
RIGHT OUTER JOIN info ON viaggiatore.id = info.id
Il database restituisce tutte le righe della tabella di destra (info) e le righe di quella di sinistra(viaggiatore) che hanno lo stesso id. In questo caso non esiste alcuna riga con id uguale a 3 quindi i campi sono riempiti con NULL.