Join tra tabelle

Introduzione

Le JOIN stanno ad indicare unione tra tabelle. L'importanza principale della JOIN risiede nella possibilità che offre per correlare e visualizzare dati appartenenti a tabelle diverse o alla medesima tabella, logicamente correlati tra di loro. Le più comuni sono essenzialmente le seguenti:

  • INNER JOIN: è la più comune oltre che il tipo predefinito. Corrisponde all'unione cartesiana di due tabelle e all'eliminazione di tutti i record risultanti che non trovino riscontro nelle condizioni della query. E' una funzione che permette di combinare i valori di due tabelle differenti secondo il criterio da noi stabilito. Le righe delle tabelle vengono combinate solo se i campi collegati con join soddisfano una determinata condizione.
  • LEFT JOIN: riporta tutte le righe della tabella "di sinistra" e le corrispondenti righe della tabella "di destra", riempiendo con NULL i campi che, nella riga estratta, non hanno corrispondenze
  • RIGHT JOIN: è l'opposto della LEFT e riporta tutte le righe della tabella "di destra" e le corrispondenti righe della tabella di "sinistra", con NULL i campi che, nella riga estratta, non hanno corrispondenze
  • FULL OUTER JOIN: è un compendio delle due precedenti e riporta tutte le righe di entrambe le tabelle riempiendo con NULL i campi della riga che non hanno corrispondenze
Nella creazione di una QueryJoin, vista la concorrenza di più tabelle, molto spesso è necessario che i nomi dei campi siano referenziate (qualificate) cioè preceduti dal nome delle tabelledi appartenenza. Questo perchè, in caso contrario, l'interprete MYSQL non saprebbe stabilire a quale tabella il campo appartenga. Qualche volta non è necessario qualificare le colonne quando il nome del campo è utilizzato solo ad una tabella e non crea ambiguità. Tuttavia è raccomandabile qualificare comunque qualsiasi nome di campo.

In una istruzione MYSQL la JOIN viene specificata come parte della clausola FROM. Una JOIN, così come una semplice SELECT, restituisce un reaultset che nel caso dell'uso di JOIN, è il risultato dell'unione di due o più tabelle.
Per le JOIN tra tabelle prenderemo in esame questi due gruppi di tabelle. Tuttavia qualche volta è previsto di lavorare con le JOIN con una sola tabella.

Nel primo gruppo di tabelle vediamo che la sql_libri e la sql_citta sono semplici tabelle, mentre la sql_lib_iscritti contiene tra i suoi campi uno denominato id_citta che mette in relazione la tabella sql_lib_iscritti e la tabella sql_citta. La tabella sql_lib_prestiti ha due campi che creano relazioni con altrettante tabelle: il campo id_libro mette in relazione la tabella sql_lib_prestiti con la tabella sql_libri ed il campo id_iscritto che mette in relazione la tabella sql_lib_prestiti con la tabella sql_lib_iscritti.

Nel socondo gruppo di tabelle abbiamo la tabella sql_agenda che contiene il campo id_citta che la mette in relazione con la tabella sql_citta.
Questo gioco di chiavi interne e chiavi esterne risulteranno molto utili per formulare richieste anche complesse con l'aiuto delle JOIN.

Qui di seguito vediamo l'elenco delle tabelle usate in questo tutorial
sql_libri, sql_citta, sql_agenda, sql_lib_prestiti

Qui sotto viene mostrata la struttura delle tabelle usate

La tabella sql_libri
Field Type Null Key Default Extra
id int(10) NO PRI auto_increment
gruppo varchar(50) YES
codice varchar(10) YES
Titolo varchar(100) NO
Autore varchar(150) YES
prezzo decimal(8,2) NO
quantita int(10) NO
La tabella sql_citta
Field Type Null Key Default Extra
id int(10) NO PRI auto_increment
cap varchar(10) YES
citta varchar(250) YES
prov varchar(10) YES
La tabella sql_agenda
Field Type Null Key Default Extra
id int(10) NO PRI auto_increment
cognome varchar(250) NO
nome varchar(250) NO
indirizzo varchar(250) NO
id_citta int(10) NO
data_nascita date NO
telefono varchar(250) NO
La tabella sql_lib_prestiti
Field Type Null Key Default Extra
id int(10) NO PRI auto_increment
id_libro int(10) NO
id_iscritto int(10) NO
data_prestito date YES
data_restituzione date YES

Nell'immagine qui sotto, invece sono evidenziate le relazioni esistenti tra le tabelle che useremo.

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum