Query join da più tabelle con Microsoft Access
Breve tutorial di MC2 E-Learning sulle query join con dati provenienti da più tabelle.Impariamo a costruire una query join con campi provienti da più tabelle con Microsoft Access
Nel tutorial 'Le Relazioni tra le tabelle di Access' abbiamo osservato che due tabelle possono essere collegate tra loro tramite un oggetto, detto "Relazione".
Tale relazione lega un campo chiave primaria di una delle 2 tabelle con un campo corrispondente presente all'interno dell'altra, detto anche chiave esterna.
A seconda delmodo in cui le tabelle vengono unite, è possibile creare i seguenti 3 tipi di JOIN:
Il primo tipo è INNER JOIN (Join interno) Questo tipo consente la selezione di un record (per essere incluso in una Query di selezione), soltanto quando nelle 2 tabelle esiste l'esatta corrispondenza tra i campi posti in relazione.
Esempio: Database Inventario Domestico. Quella che segue è lafinestra delle Relazioni. Le tabelle sono 3: Inventario domestico,Categorie e Stanze.

Costruiamo una Query di selezione semplice sulle tabelle 'Inventario domestico' e 'Stanze', le quali sono in relazione "uno a molti" tra di loro e collegate dal campo 'IdStanza'. La query include tutti i campi della prima tabella e il campo 'Stanza' (la descrizione della stanza) della seconda.

Se ora proviamo ad aprire la query in modalità 'Visualizzazione Foglio Dati' notiamo che i records estratti sono 11:

mentre se apriamo la tabella 'Stanze' ci accorgiamo che i records sono 12, come mai ? In effetti la Cucina non ha al momento alcuna registrazione di inventario, per cui il relativo record non è stato estratto perchè non soddisfa la condizione diINNER JOIN (tutti i records con esatta corrispondenza nelle 2 tabelle...)

Il secondo tipo è LEFT OUTER JOIN (join a sinistra), vediamo l'esempio:
Database Olimpiadi. Vogliamo ottenere un prospetto contenente tutte le Nazioni del mondo e a fianco di ciascuna di esse l'indicazione del numero di medaglie vinte nel corso di tutte le edizioni.
Faremo quindi ancora unaoperazione di JOIN, e più precisamente tra la tabella Nazioni e la tabella dei Risultati, il campo che le lega è il campo IdNazione.
Se però eseguissimo una INNER JOIN otterremmo un elenco che escluderebbe tutte le Nazioni che non hanno mai vinto una medaglia d'oro, perchè la INNER JOIN prevede la presenza del valore del campo relazionato in entrembe le tabelle; eseguiremo invece una OUTER JOIN di tipo LEFT, ponendo "sulla sinistra" la tabella delle Nazioni per ottenere l'elenco completo delle Nazioni e naturalmente otteremo molti valori uguali a zero.

In modalità visualizzazione struttura selezioniamo 'Totali' quindi la Formula 'Raggruppamento' per il campo Nazione e la Formula 'Conteggio' per il campo Vincitore (vedi anche tutorial 'Query di raggruppamento').
Ora facciamo doppio click sullalinea che congiunge le 2 tabelle, nella parte alta della finestra: appare la finestra di dialogo 'Proprietà join'. Notiamo che la tabella di sinistra è Nazioni, mentre quella di destra è 'Risultati'.
Definire una JOIN di tipo LEFT OUTER JOIN equivale a selezionarel'opzione 2 e cioè 'Includi tutti i record di 'Nazioni' e solo i record di 'Risultati' in cui i campi collegati sono uguali.

Facciamo click su 'OK' e notiamo ancora che la linea checollega le 2 tabelle presenta una freccia rivolta verso destra: questo sta ad indicare è stato impostato un LEFT JOIN (la regola è inversa). Se avessimo impostato '3' la freccia sarebbe rivolta verso sinistra ma in quel caso si tratterebbe di RIGTH JOIN (vedi esempio più avanti).
Ecco comunque il risultato della nostra query di raggruppamento (che è pur sempre una query di selezione) con definizione di criterio LEFT OUTER JOIN : le nazioni sono 199 e sono elencate indipendentemente dal fatto che abbiano mai avuto medaglie oppure no.

Il terzo tipo è RIGHT OUTER JOIN (join a destra), vediamo l'esempio:
Torniamo al database 'Inventario Domestico'. Costruiamo una nuova query di selezione questa volta sulle tabella 'Categoria' e sulla tabella 'Inventario domestico', selezionando il campo 'NomeCategoria' (daCategorie), quindi il campo 'Descrizione' (da tabella 'Inventario domestico') e infine 'DataDiAcquisto' (da tabella 'Inventario domestico')

Non impostiamo per ora alcun criterio di JOIN, quello predefinito è sempre 'INNER JOIN' o join interno, corrispondente alla selezione 1 della finestra di dialogo 'Proprietà join': "Includi solo le righe in cui i campi collegati da entrambe le tabelle sono uguali".
Visualizziamo i dati della query: i records estratti sono 11. Quello che vogliamo porre in evidenza in questo caso è che questo tipo di query non visualizzerebbe eventuali registrazioni (records) nelle quali ci si è dimenticati di impostare la categoria!
Quindi vorremmo una query che ci mostrasse invece proprio quali records di inventario non trovano una corrispondenza nella tabella delle Categorie.

Per giungere al nostro obiettivo non dobbiamo far altro che tornare nell'ambiente di definizione struttura della nostra query, fare doppio click sulla linea che congiunge le 2 tabelle e far comparire la finestra di dialogo 'Proprietà join': impostiamo la selezione questa volta sul numero '3', cioè: "Includi tutti i record di 'Inventario domestico' e solo i record di 'Categorie' in cui i campi collegati sono uguali".
Abbiamo appena impostato come criterio di Join, il criterio RIGHT OUTER JOIN (join a destra).

Facciamo click su 'OK'. Notiamo che adesso la freccia è rivolta verso sinistra(join a destra).

Non ci resta ora che visualizzare nuovamente i risultati della query ed ecco che "spiccano" i records che non sono abbinati ad alcuna categoria: in questo caso la registrazione 'Lavastoviglie', acquistata il 1/12/1995, che non appariva prima!

Avvertenza !
Il file dell'esempioQuery-join-da-piu-tabelle.zip contenente la Query di cui si è discusso in questo tutorial ed infine alcuni dati di prova tratti dal database 'Inventario domestico.mdb', è disponibile nell'area 'Tutorial Download' riservata agli iscritti alle nostre newsletters. Iscriviti ora alla newsletter 'Utilizzare Access per davvero', è gratis! Puoi utilizzare il riquadro qui a lato sulla sinistra della pagina in alto oppure seguire questo collegamento:
http://www.mc2elearning.com/html/utilizzare_access.html
Il file dell'esempioQuery-join-da-piu-tabelle.zip contenente la Query di cui si è discusso in questo tutorial ed infine alcuni dati di prova tratti dal database 'Inventario domestico.mdb', è disponibile nell'area 'Tutorial Download' riservata agli iscritti alle nostre newsletters. Iscriviti ora alla newsletter 'Utilizzare Access per davvero', è gratis! Puoi utilizzare il riquadro qui a lato sulla sinistra della pagina in alto oppure seguire questo collegamento:
http://www.mc2elearning.com/html/utilizzare_access.html
Query Selezione semplice
Query Selezione con criteri
Query di Raggruppamento
Query a campi incrociati (PIVOT)
Query Join da più tabelle
Query di creazione tabella
Query di accodamento
Query di aggiornamento
Query di eliminazione
Query Union o Query Unione
Esempi Query con Access
Tutorials su Microsoft Access
Dr.Maurizio Cucchiara
autore del corso:
"Corso Base di Microsoft Access"
disponibile on line su questo sito
MC2 E-Learning S.a r.l.
Formazione per il Web
http://www.mc2.it/html/access.html
Cerca sul web con Google:
Ricerca personalizzata
