Magazine Informatica

JOIN - Relazioni tra tabelle in MySQL

Creato il 14 giugno 2012 da Ketek @CarloVentrella

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.

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:

 

Esempio di Cross Join

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) :

Esempio di Inner Join
 

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.

 

Esempio di Left Outer Join

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

Esempio di Right Outer Join



Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :

Dossier Paperblog