Collegare tabelle e query

Collegare tabelle e query

Quando si includono più origini dati in una query di Access, mediante l’uso dei join è possibile limitare i record visualizzati in base al modo in cui le origini dati sono correlate tra loro. Inoltre i join possono essere usati per combinare record da entrambe le origini dati, in modo che ogni coppia di record diventi un solo record nei risultati della query.

In questo articolo vengono illustrati i diversi tipi di join e viene descritto come utilizzarli in una query. Per impostazione predefinita, viene creato automaticamente un join se esiste già una relazione tra due origini dati usate in una query e se sono presenti campi evidentemente corrispondenti. È comunque possibile eliminare un join creato automaticamente. Questo articolo contiene informazioni di base sulle relazioni tra tabelle, inclusa la procedura per crearne una.

Nota: Tramite l’uso di join è possibile unire query usando la stessa procedura usata per unire le tabelle, nonché unire query e tabelle tra loro.

Contenuto dell'articolo

Panoramica

Tipi di join

Visualizzare le righe delle tabelle unite in cui è presente un valore comune

Visualizzare tutte le righe di una tabella e le righe corrispondente dell'altra tabella

Visualizzare tutte le righe di entrambe le tabelle e unirle tramite join se è presente un valore comune

Cross join

Unire tabelle in base a una disuguaglianza dei valori di campo

Eliminare un join

Panoramica

Un database è una raccolta di tabelle di dati che presentano relazioni logiche tra loro che possono essere usate per connettere tra loro le tabelle in base ai campi che hanno in comune. Una tabella può essere inclusa in più relazioni, ma ogni relazione ha sempre e solo due tabelle. In una query, la relazione è rappresentata da un join.

Quando si aggiungono tabelle a una query Access crea join sulla base delle relazioni che sono state definite tra le tabelle. È possibile creare manualmente join nelle query, anche se non presentano relazioni già definite. Se si usano altre query, invece o in aggiunta alle tabelle, come origini dati per una query, è possibile creare join tra le query di origine e anche tra le query di origine e le tabelle usate come origini dati.

Il comportamento dei join è analogo ai criteri di query che stabiliscono regole a cui i dati devono attenersi per essere inclusi nelle operazioni di query. Diversamente dai criteri, i join stabiliscono che ogni coppia di righe che soddisfi le condizioni del join verrà combinata nel recordset per formare una singola riga.

Esistono quattro tipi di join fondamentali: inner join, outer join, cross join e unequal join. Questo articolo illustra i diversi tipi di join utilizzabili, il motivo per cui usare ciascun tipo e come creare un join.

I join rappresentano per le query ciò che le relazioni rappresentano per le tabelle: un'indicazione del modo in cui i dati di due origini possono essere combinati in base ai valori dei dati che hanno in comune. Ecco l'illustrazione di un join nella Visualizzazione Struttura della query, con la finestra di dialogo contenente le proprietà del join:

Finestra Proprietà join.

La riga tra le tabelle costituisce il join. Fare doppio clic su un join per aprire la finestra di dialogo Proprietà join (illustrata nell’immagine) ed esaminare o modificare il join.

Talvolta i join sono direzionali. In quest'area della finestra di dialogo è indicata la funzione delle tabelle nel join e i campi utilizzati per collegare le tabelle tramite join.

In quest'area viene indicato il tipo di join: l'opzione 1 corrisponde a un inner join, l’opzione 2 a un left outer join e la 3 a un right outer join.

È possibile usare i campi di entrambe le tabelle e visualizzare i dati relativi a una determinata attività. Non sono inclusi altri dati in un inner join. Nel caso di un outer join i record non correlati di una tabella sono inclusi nei risultati della query.

Inizio pagina

Tipi di join

Esistono quattro tipi di join fondamentali: inner join, outer join, cross join e unequal join. I cross join e gli unequal join sono tipi di join avanzati e vengono utilizzati raramente, ma è opportuno conoscerli per avere un quadro completo del funzionamento dei join.

Inner join: combinazione dei soli dati correlati di due tabelle

Un inner join è un join in cui Access include i dati di una tabella se nella tabella correlata sono presenti dati corrispondenti e viceversa. Nella maggior parte dei casi, verranno utilizzati inner join. Quando si crea un join e non si specifica di che tipo è, per impostazione predefinita Access suppone si voglia usare un inner join. L’utilità risiede nella possibilità di combinare dati da due origini in base ai valori condivisi, in modo che si possano visualizzare solo quando vi è una visione di insieme.

Outer join: combinazione di tutti i dati correlati e visualizzazione di tutti i record residui di una tabella

Un outer join è simile a un inner join, ma prevede l’aggiunta delle righe residue di una delle tabelle. Gli outer join sono direzionali: un left outer join include tutti i record della tabella sinistra, ovvero la prima tabella del join, mentre un right outer join include tutti i record della tabella destra, ovvero la seconda tabella del join.

Full outer join: tutti i dati, combinati laddove possibile

In alcuni sistemi, un outer join può includere tutte le righe delle due tabelle con la combinazione delle righe corrispondenti. Si tratta di un cosiddetto full outer join che non viene supportato esplicitamente da Access. È tuttavia possibile usare un cross join e i criteri per ottenere lo stesso risultato.

Cross join: tutti i dati, combinati in tutti i modi possibili

Nella maggior parte dei casi, un cross join è la conseguenza dell'aggiunta di due tabelle a una query dimenticando di collegarle. Access interpreta questa situazione supponendo che si vogliano visualizzare i record di una tabella con tutti i record dell'altra in ogni possibile combinazione. Poiché non è possibile combinare i dati, questo tipo di join raramente produce risultati significativi. Tuttavia in alcuni casi un cross join può tornare utile.

Unequal join: simili a un join normale, ma usano un confronto diverso per combinare le righe

Gli unequal join usano un operatore diverso dal segno di uguale (=) per confrontare i valori e decidere se e come combinare i dati. Questo tipo di join non sono supportati in modo esplicito, ma è possibile utilizzare un cross join con i criteri per ottenere lo stesso risultato.

Visualizzare le righe delle tabelle unite in cui è presente un valore comune

Usare un inner join se si vogliono visualizzare solo le righe con valori corrispondenti nel campo di join. In Access gli inner join vengono creati automaticamente.

Gli inner join rappresentano il tipo più comune di join. Indicano a una query che le righe di una delle tabelle collegate corrispondono alle righe dell'altra tabella, in base ai dati dei campi collegati. Se si esegue una query con un inner join, solo le righe in cui è presente un valore comune a entrambe le tabelle del join verranno aggiunte alla query.

Come utilizzare un inner join

Nella maggior parte dei casi, non è necessario eseguire alcuna operazione per usare un inner join. Se sono presenti delle relazioni nelle le tabelle aggiunte a una query, Access crea automaticamente un inner join tra le coppia di tabelle correlate. Se viene applicata l'integrità referenziale, Access visualizza inoltre il numero "1" sulla linea di join per indicare la tabella che si trova sul lato "uno" di una relazione uno-a-molti e il simbolo di infinito () per indicare la tabella che si trova sul lato "molti".

Anche se non vengono create relazioni, Access genera automaticamente un inner join quando vengono aggiunte due tabelle a una query ognuna con un campo dati dello stesso tipo o compatibili, e uno dei campi di join è una chiave primaria. In questo caso i simboli "uno" e "molti" non vengono visualizzati perché non viene applicata l'integrità referenziale.

Se si aggiungono query alla query e non sono state create relazioni, Access non crea automaticamente inner join tra le query né tra query e tabelle. In genere, è consigliabile crearli manualmente. Creare un inner join trascinando un campo da un'origine dati a un campo in un'altra origine dati. Access visualizza una linea tra i due campi per indicare che è stato creato un join.

Sintassi SQL di un inner join

Gli inner join vengono specificati in SQL all'interno della clausola FROM, come illustrato di seguito:

FROM tabella1 INNER JOIN tabella2 ON tabella1.campo1 confronta tabella2.campo2

L'operazione INNER JOIN è composta dalle parti seguenti:

Parte

Descrizione

tabella1, tabella2

Nomi delle tabelle di cui vengono combinati i record.

campo1, campo2

Nomi dei campi che vengono collegati tramite join. Se non includono dati numerici, i campi devono essere dello stesso tipo di dati e contenere lo stesso genere di dati, tuttavia non è necessario che abbiano lo stesso nome.

compare

Operatore di confronto relazionale: "=," "<," ">," "<=," ">=," o "<>."

Per ulteriori informazioni sulla sintassi degli inner join, vedere Operazione INNER JOIN.

Inizio pagina

Visualizzare tutte le righe di una tabella e le righe corrispondente dell'altra tabella

Gli outer join indicano a una query che, anche se alcune righe su entrambi i lati del join corrispondono esattamente, la query deve includere tutte le righe di una tabella, nonché le righe dell'altra tabella che condividono un valore comune su entrambi i lati del join.

Gli outer join possono essere left outer join o right outer join. In un left outer join, la query include tutte le righe della prima tabella della clausola FROM nell’istruzione SQL e solo le righe della seconda in cui il campo join contiene valori comuni a entrambe le tabelle. In un right outer join, la query include tutte le righe della seconda tabella della clausola FROM nell’istruzione SQL e solo le righe della prima in cui il campo join contiene valori comuni a entrambe le tabelle.

Nota: È possibile stabilire facilmente quale tabella è la tabella sinistra o destra in un dato join facendo doppio clic sul join e quindi verificando nella finestra di dialogo Proprietà join. In alternativa, è possibile passare alla visualizzazione SQL e quindi esaminare la clausola FROM.

Poiché alcune righe su un lato di un outer join non disporranno di righe corrispondenti alla tabella dell’altro lato, alcuni campi restituiti nei risultati della query da quest’altra tabella saranno vuoti in caso di mancata corrispondenza delle righe.

Come utilizzare un outer join

Per creare un outer join è possibile modificarne un inner join esistente. Se non sono presenti inner join, è possibile crearne uno e quindi cambiarlo in outer join.

Convertire un inner join in outer join

  1. Nella visualizzazione Struttura della query fare doppio clic sul join che si desidera modificare.

    Verrà visualizzata la finestra di dialogo Proprietà join.

  2. Nella finestra di dialogo Proprietà join prestare attenzione alle scelte disponibili accanto alle opzioni 2 e 3.

  3. Fare clic sull'opzione da usare e quindi su OK.

  4. Insieme al join verrà visualizzata una freccia che collega l'origine dati in cui sono incluse tutte le righe all'origine dati in cui verranno incluse solo le righe che soddisfano la condizione di join.

Outer join ambigui

Se si crea una query che contiene un LEFT JOIN e un INNER JOIN, Access potrebbe non essere in grado di determinare quale operazione eseguire per prima. Poiché i risultati variano in base al tipo di join eseguito per primo, Access restituisce un messaggio di errore:

Per risolvere il problema, è necessario modificare la query in modo che sia chiaramente indicato il join da eseguire per primo.

Sintassi SQL di un outer join

Gli outer join vengono specificati in SQL all'interno della clausola FROM, come illustrato di seguito:

FROM tabella1 [ LEFT | RIGHT ] JOIN tabella2
ON tabella1.campo1 compare tabella2.campo2

Le operazioni LEFT JOIN e RIGHT JOIN includono le parti seguenti:

Parte

Descrizione

tabella1, tabella2

Nomi delle tabelle di cui vengono combinati i record.

campo1, campo2

I nomi dei campi che vengono collegati tramite join. I campi devono essere dello stesso tipo di dati e includere lo stesso genere di dati, tuttavia non è necessario che utilizzino lo stesso nome.

compare

Operatore di confronto relazionale: "=," "<," ">," "<=," ">=," o "<>."

Per ulteriori informazioni sulla sintassi degli outer join, vedere Operazioni LEFT JOIN, RIGHT JOIN.

Inizio pagina

Visualizzare tutte le righe di entrambe le tabelle e unirle tramite join se è presente un valore comune

Se si vogliono visualizzare tutte le righe delle due tabelle e unirle tramite join in base ai valori comuni, usare un full outer join. Access non supporta esplicitamente i full outer join ma è possibile ottenere lo stesso risultato usando una query di unione. La procedura seguente descrive come eseguire questa operazione, ma se si vogliono altre informazioni sulle query di unione consultare la sezione Vedere anche.

Utilizzo di una query di unione per eseguire un full outer join:

  1. Creare una query contenente un left outer join nel campo che si desidera utilizzare per un full outer join.

  2. Nel gruppo Visualizzazioni della scheda Home fare clic su Visualizza, quindi su Visualizzazione SQL.

  3. Premere CTRL+C per copiare il codice SQL.

  4. Eliminare il punto e virgola presente alla fine della clausola FROM, quindi premere INVIO.

  5. Digitare UNION, quindi premere INVIO.

    Nota: Quando si utilizza una query di unione per eseguire un full outer join, non utilizzare la parola chiave ALL.

  6. Premere CTRL+V per incollare il codice SQL copiato nel passaggio 3.

  7. Nel codice incollato cambiare LEFT JOIN in RIGHT JOIN.

  8. Eliminare il punto e virgola presente alla fine della seconda clausola FROM, quindi premere INVIO.

  9. Aggiungere una clausola WHERE per specificare che il valore del campo di join è NULL nella prima tabella elencata nella clausola FROM, ovvero la tabella a sinistra.

    Ad esempio se la clausola FROM è simile a quella riportata di seguito:

    FROM Products RIGHT JOIN [Order Details] 
    ON Products.ID = [Order Details].[Product ID]

    Aggiungere la seguente clausola WHERE:

    WHERE Products.ID IS NULL

  10. Digitare un punto e virgola (;) alla fine della clausola WHERE per indicare la fine della query di unione.

  11. Nel gruppo Risultati della scheda Struttura fare clic su Esegui.

Cross join

I cross join sono diversi dagli inner join e outer join e non sono esplicitamente rappresentati in Access. In un cross join ogni riga di una tabella viene combinata con ogni riga dell’altra tabella, dando origine al cosiddetto prodotto incrociato o cartesiano. Viene restituito un prodotto incrociato, ogni volta che si esegue una query con tabelle non collegate esplicitamente. I cross join generalmente vengono creati involontariamente, ma in alcuni casi possono essere utili.

Perché utilizzare un cross join

Se si vuole esaminare ogni possibile combinazione di righe tra due tabelle o query, è necessario usare un cross join. Supponiamo ad esempio che l'azienda abbia avuto un anno particolarmente proficuo e che si stia pensando di offrire sconti ai clienti. È possibile creare una query che sommerà gli acquisti di ogni cliente, nonché una piccola tabella con diverse percentuali di sconto e combinare le due in un'altra query che esegua un cross join. Si ottiene una query che visualizza un set di ipotetici sconti per ogni cliente.

Come utilizzare un cross join

Viene creato un cross join ogni volta che si includono tabelle o query nella query e non viene creato almeno un join esplicitamente per ogni tabella o query. Access combina ogni riga di una tabella o query che non sia esplicitamente collegata a un’altra tabella o query, a ogni riga dei risultati. Si consideri lo scenario con gli sconti del paragrafo precedente. Si supponga di avere 91 clienti e che si vogliano considerare cinque ipotetiche percentuali di sconto. Il cross join genera 455 righe, ossia il prodotto di 91 e 5.

Come si può immaginare, i cross join non intenzionali possono creare enormi quantità di righe nei risultati della query. Inoltre, i risultati sono sono generalmente significativi perché, se non si vuole combinare ogni riga con le altre righe, la maggior parte delle righe combinate visualizzate nei risultati è priva di significato. Infine, le query che usano involontariamente cross join possono richiedere davvero molto tempo per essere eseguite.

Cross join non intenzionale nella visualizzazione Struttura della query

1. I campi cerchiati devono essere uniti tra loro.

Prodotto incrociato non intenzionale

1. Si noti il numero molto elevato di record.

Risultato della query corretto

1. Si noti che il numero di record è molto più basso.

Inizio pagina

Unire tabelle in base a una disuguaglianza dei valori di campo

Non necessariamente i join devono essere basati sull'equivalenza dei campi collegati. Un join può utilizzare qualsiasi operatore di confronto, ad esempio maggiore di (>), minore di (<) o diverso da (<>). I join non basati su l’equivalenza sono denominati unequal join.

Se si vogliono combinare le righe di due origini dati in base ai valori di campo non uguali, è necessario usare un unequal join. In genere, gli unequal join usano operatori di confronto come maggiore di (>), minore di (<), maggiore o uguale a (>=) o minore o uguale a (<=). Gli unequal join basati sull'operatore diverso da (<>) possono restituire lo stesso numero di righe dei cross join e i risultati possono essere difficili da interpretare.

Come utilizzare un unequal join

Gli unequal join non sono supportati in visualizzazione Struttura. Se si vuole usare questo tipo di join è necessario usare la visualizzazione SQL. Tuttavia, è possibile creare un join in visualizzazione Struttura, passare alla visualizzazione SQL, trovare l'operatore di confronto (=) e cambiarlo con l'operatore che si vuole usare. Dopo aver eseguito questa operazione, è possibile riaprire la query in visualizzazione Struttura solo se si modifica prima l’operatore di confronto in modo che sia uguale (=) nella visualizzazione SQL.

Eliminare un join

Se in Access viene automaticamente creato un join indesiderato oppure si crea un join per errore, ad esempio un join tra due campi con tipi di dati diversi, è possibile eliminarlo.

  1. Nella visualizzazione Struttura della query fare clic sul join che si desidera rimuovere.

  2. Premere CANC.

oppure

  • Nella griglia di struttura della query fare clic con il pulsante destro del mouse sul join che si desidera rimuovere e quindi scegliere Elimina.

Inizio pagina

Vedere anche

Aggiungere record a una tabella usando una query di accodamento

Combinare i risultati di più query di selezione usando una query di unione

Creare una query basata su più tabelle

Creare, modificare o eliminare una relazione

Amplia le tue competenze su Office
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa al programma Office Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×