In alcuni casi per creare e usare le query in Access è sufficiente selezionare i campi da una tabella, applicare eventuali criteri e quindi visualizzare i risultati. Nella maggior parte dei casi, tuttavia, i dati necessari si trovano in più tabelle. Per fortuna, è possibile creare una query che combina le informazioni da più origini. Questo argomento illustra alcuni scenari in cui si recuperano dati da più tabelle e descrive la procedura specifica.
Per saperne di più
Usare dati da una tabella correlata per ottimizzare le informazioni nella query
È possibile che una query basata su una tabella fornisca le informazioni necessarie, ma il recupero di dati da un'altra tabella potrebbe contribuire a rendere i risultati della query più chiari e utili. Si supponga ad esempio di avere un elenco di ID di dipendenti visualizzati nei risultati della query. La visualizzazione del nome del dipendente nei risultati sarebbe più utile, ma i nomi dei dipendenti si trovano in una tabella diversa. Per visualizzare i nomi dei dipendenti nei risultati della query, è necessario includere entrambe le tabelle nella query.
Usare la Creazione guidata Query per creare una query da una tabella primaria e una tabella correlata
-
Assicurarsi che le tabelle abbiano una relazione definita nella finestra Relazioni.
Procedura
-
Nel gruppo Mostra/Nascondi della scheda Strumenti database fare clic su Relazioni.
-
Nel gruppo Relazioni della scheda Progettazione fare clic su Tutte le relazioni.
-
Identificare le tabelle per cui è necessaria una relazione definita.
-
Se le tabelle sono visibili nella finestra Relazioni, verificare se è già stata definita una relazione.
La relazione viene rappresentata da una linea che collega le due tabelle in un campo comune. È possibile fare doppio clic su una linea di relazione per visualizzare i campi delle tabelle connessi dalla relazione.
-
Se le tabelle non sono visibili nella finestra Relazioni, è necessario aggiungerle.
Nel gruppo Mostra/Nascondi della scheda Progettazione fare clic su Nomi tabelle.
Fare doppio clic su ogni tabella da visualizzare, quindi fare clic su Chiudi.
-
-
Se non è disponibile alcuna relazione tra le due tabelle, crearne una trascinando un campo da una delle tabelle in un campo dell'altra tabella. I campi su cui viene creata la relazione tra le tabelle devono avere tipi di dati identici.
Nota: È possibile creare una relazione tra un campo con tipo di dati Numerazione automatica e un campo con tipo di dati Numerico, se tale campo ha una dimensione estesa di campo numeri interi. Questa situazione si verifica spesso quando si crea una relazione uno-a-molti.
Verrà visualizzata la finestra di dialogo Modifica relazioni.
-
Fare clic su Crea per creare la relazione.
Per altre informazioni sulle opzioni disponibili quando si crea una relazione, vedere l'articolo Creare, modificare o eliminare una relazione.
-
Chiudere la finestra Relazioni.
-
-
Nel gruppo Query della scheda Crea fare clic su Creazione guidata Query.
-
Nella finestra di dialogo Nuova query fare clic su Creazione guidata Query semplice, quindi fare clic su OK.
-
Nella casella combinata Tabelle/query fare clic sulla tabella che contiene le informazioni di base da includere nella query.
-
Nell'elenco Campi disponibili fare clic sul primo campo da includere nella query, quindi sul pulsante con freccia singola a destra per spostare il campo nell'elenco Campi selezionati. Eseguire la stessa operazione con ogni campo aggiuntivo della tabella da includere nella query. Si può trattare di campi da restituire nell'output della query o di campi da usare per limitare le righe dell'output tramite l'applicazione di criteri.
-
Nella casella combinata Tabelle/query fare clic sulla tabella che include i dati correlati da usare per ottimizzare i risultati delle query.
-
Aggiungere i campi da usare per ottimizzare i risultati della query all'elenco Campi selezionati e quindi fare clic su Avanti.
-
In Creare una query di dettaglio o di riepilogo? fare clic su Dettaglio o Riepilogo.
Se non si vuole che la query esegua funzioni di aggregazione (Sum, Avg, Min, Max, Count, StDev o Var), scegliere una query di tipo Dettaglio. Se si vuole che la query esegua una funzione di aggregazione, scegliere una query di tipo Riepilogo. Dopo avere effettuato la scelta, fare clic su Avanti.
-
Fare clic su Fine per visualizzare i risultati.
Esempio che usa il database di esempio Northwind
Nell'esempio seguente verrà usata la Creazione guidata Query per creare una query che mostra un elenco di ordini, i costi di spedizione per ogni ordine e il nome del dipendente che ha gestito ogni ordine.
Nota: Questo esempio comporta la modifica del database di esempio Northwind. È consigliabile creare una copia di backup del database di esempio Northwind e quindi eseguire le procedure di questo esempio usando la copia di backup.
Usare la Creazione guidata Query per creare la query
-
Aprire il database di esempio Northwind. Chiudere la maschera di accesso.
-
Nel gruppo Query della scheda Crea fare clic su Creazione guidata Query.
-
Nella finestra di dialogo Nuova query fare clic su Creazione guidata Query semplice, quindi fare clic su OK.
-
Nella casella combinata Tabelle/query fare clic su Tabella: Orders.
-
Nell'elenco Campi disponibili fare doppio clic su OrderID per spostare questo campo nell'elenco Campi selezionati. Fare doppio clic su Shipping Fee per spostare questo campo nell'elenco Campi selezionati.
-
Nella casella combinata Tabelle/query fare clic su Tabella: Employees.
-
Nell'elenco Campi disponibili fare doppio clic su FirstName per spostare questo campo nell'elenco Campi selezionati. Fare doppio clic su LastName per spostare questo campo nell'elenco Campi selezionati. Fare clic su Avanti.
-
Poiché si sta creando un elenco di tutti gli ordini, è consigliabile usare una query di tipo Dettaglio. Per riepilogare i costi di spedizione per dipendente o per eseguire altre funzioni di aggregazione, usare una query di tipo Riepilogo. Fare clic su Dettaglio (mostra tutti i campi di tutti i record) e quindi fare clic su Avanti.
-
Fare clic su Fine per visualizzare i risultati.
La query restituisce un elenco di ordini, ognuno con i rispettivi costi di spedizione e con nome e cognome del dipendente che lo ha gestito.
Connettere i dati in due tabelle usando le rispettive relazioni con una terza tabella
I dati di due tabelle sono spesso correlati tramite una terza tabella. Questa situazione si verifica in genere perché i dati delle prime due tabelle sono correlati tramite una relazione molti-a-molti. È spesso consigliabile suddividere una relazione molti-a-molti tra due tabelle in due relazioni uno-a-molti tra tre tabelle. Per ottenere questo risultato, creare una terza tabella, definita tabella di collegamento o tabella relazione, che include una chiave primaria e una chiave esterna per ognuna delle altre tabelle. Una relazione uno-a-molti viene quindi creata tra ogni chiave esterna nella tabella di collegamento e la chiave primaria corrispondente di una delle altre tabelle. In questi casi è necessario includere tutte e tre le tabelle nella query, anche se si vogliono recuperare dati solo da due tabelle.
Creare una query di selezione usando tabelle con una relazione molti-a-molti
-
Nel gruppo Query della scheda Crea fare clic su Struttura query.
-
Fare doppio clic sulle due tabelle contenenti i dati da includere nella query e sulla tabella di collegamento che le collega, quindi fare clic su Chiudi.
Tutte e tre le tabelle vengono visualizzate nell'area di lavoro di progettazione della query, collegate tramite i campi appropriati.
-
Fare doppio clic su ogni campo da usare nei risultati della query. Ogni campo viene quindi visualizzato nella griglia di struttura della query.
-
Nella griglia di struttura della query usare la riga Criteri per immettere i criteri di campo. Per usare un criterio di campo senza visualizzare il campo nei risultati della query, deselezionare la casella di controllo nella riga Mostra per il campo.
-
Per ordinare i risultati in base ai valori di un campo, nella griglia di struttura della query fare clic su Crescente o Decrescente, in base al modo in cui si vogliono ordinare i record, nella riga Ordina per il campo.
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
Access visualizza l'output della query nella visualizzazione Foglio dati.
Esempio che usa il database di esempio Northwind
Nota: Questo esempio comporta la modifica del database di esempio Northwind. È consigliabile creare una copia di backup del database di esempio Northwind e quindi eseguire le procedure di questo esempio usando la copia di backup.
Si supponga di avere una nuova opportunità: un fornitore di Rio de Janeiro ha trovato il sito Web e potrebbe voler fare affari con l'utente. Tuttavia, operano solo a Rio e nelle vicinanze di São Paulo. Essi forniscono ogni categoria di prodotto alimentare che si broker. Si tratta di un'attività piuttosto grande e si vuole avere la certezza di poter accedere a un numero sufficiente di vendite potenziali per renderla utile: almeno $ 20.000,00 all'anno di vendite (circa $ 9.300,00). Puoi fornirgli il mercato di cui hanno bisogno?
I dati necessari per rispondere a questa domanda sono disponibili in due posizioni, ovvero una tabella Customers e una tabella Order Details. Queste tabelle sono collegate tra loro tramite una tabella Orders. Le relazioni tra le tabelle sono già state definite. Nella tabella Orders ogni ordine può essere associato solo a un cliente, correlato alla tabella Customers tramite il campo CustomerID. Ogni record della tabella Order Detail è correlato solo a un ordine nella tabella Orders, tramite il campo OrderID. Un determinato cliente può essere quindi associato a più ordini, ognuno dei quali include molti dettagli relativi all'ordine.
In questo esempio verrà creata una query a campi incrociati che mostra il totale delle vendite per ogni anno nelle città di Rio de Janeiro e São Paulo.
Creare la query nella visualizzazione Struttura
-
Aprire il database Northwind. Chiudere la maschera di accesso.
-
Nel gruppo Query della scheda Crea fare clic su Struttura query.
-
Fare doppio clic su Clienti, Ordini e quindiDettagli ordine.
Tutte e tre le tabelle vengono visualizzate nell'area di lavoro di progettazione della query.
-
Nella tabella Customers fare doppio clic sul campo City per aggiungerlo alla griglia di struttura della query.
-
Nella colonna City della griglia di struttura della query digitare nella riga Criteri il valore In ("Rio de Janeiro","São Paulo"). Nella query verranno inclusi solo i record in cui il cliente si trova in una delle due città.
-
Nella tabella Order Details fare doppio clic sui campi ShippedDate e UnitPrice.
I campi vengono aggiunti alla griglia di struttura della query.
-
Nella colonna ShippedDate della griglia di struttura della query selezionare la riga Campo. Sostituire [ShippedDate] con Year: Format([ShippedDate],"yyyy"). Verrà creato un alias di campo, Year, che consente di usare solo la porzione relativa all'anno del valore del campo ShippedDate.
-
Nella colonna UnitPrice della griglia di struttura della query selezionare la riga Campo. Sostituire [UnitPrice] con Sales: [Order Details].[UnitPrice]*[Quantity]-[Order Details].[UnitPrice]*[Quantity]*[Discount]. Verrà creato un alias di campo, Sales, che calcola le vendite per ogni record.
-
Nel gruppo Tipo di query della scheda Struttura fare clic su A campi incrociati.
Due nuove righe, Totale e A campi incrociati, vengono visualizzate nella griglia di struttura della query.
-
Nella colonna City della griglia di struttura della query fare clic sulla riga A campi incrociati e quindi su Intestazione riga.
I valori relativi alle città verranno visualizzati come intestazioni di riga, ovvero la query restituisce una riga per ogni città.
-
Nella colonna Year fare clic sulla riga A campi incrociati e quindi su Intestaz. colonna.
I valori relativi all'anno verranno visualizzati come intestazioni di colonna, ovvero la query restituisce una colonna per ogni anno.
-
Nella colonna Sales fare clic sulla riga A campi incrociati e quindi su Valore.
I valori relativi alle vendite verranno visualizzati in corrispondenza dell'intersezione tra righe e colonna, ovvero la query restituisce un valore relativo alle vendite per ogni combinazione di città e anno.
-
Nella colonna Sales fare clic sulla riga Totali e quindi su Somma.
La query sommerà i valori disponibili nella colonna.
È possibile lasciare la riga Totali per le altre due colonne impostata sul valore predefinito Raggruppa per, perché si vuole visualizzare ogni valore per queste colonne, non i valori aggregati.
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
È stata creata una query che restituisce il totale delle vendite per ogni anno a Rio de Janeiro e São Paulo.
Visualizzare tutti i record da due tabelle simili
È a volte possibile che si voglia combinare i dati da due tabelle con struttura identica, ma che una delle tabelle si trovi in un altro database. Si consideri lo scenario seguente.
Si supponga di essere un analista che esamina dati relativi agli studenti. Si avvia un'iniziativa di condivisione dei dati tra l'istituto di istruzione e un altro istituto, in modo che entrambe le scuole possano migliorare i corsi offerti. Per alcune delle domande da analizzare potrebbe essere consigliabile esaminare tutti i record di entrambi gli istituti di istruzione insieme, invece di esaminare separatamente i record di ogni istituto di istruzione.
È possibile importare i dati dell'altro istituto d'istruzione in nuove tabelle del database, ma eventuali modifiche apportate ai dati dell'altro istituto di istruzione non verranno rispecchiate nel database. Una soluzione migliore consiste nel creare un collegamento alle tabelle dell'altro istituto di istruzione e quindi creare query che combinano i dati durante l'esecuzione. Sarà possibile analizzare i dati come singolo set, invece di eseguire due analisi e provare a interpretarli come se fossero un set unico.
Per visualizzare tutti i record da due tabelle con struttura identica, usare una query di unione.
Le query di unione non possono essere visualizzate nella visualizzazione Struttura. È possibile crearle usando i comandi SQL immessi in una scheda dell'oggetto Visualizzazione SQL.
Creare una query di unione usando due tabelle
-
Nel gruppo Query della scheda Crea fare clic su Struttura query.
-
Nel gruppo Tipo di query della scheda Struttura fare clic su Unione.
La query passa dalla visualizzazione Struttura alla visualizzazione SQL. A questo punto, la scheda dell'oggetto della visualizzazione SQL è vuota.
-
Nella visualizzazione SQL digitare SELECT, seguito da un elenco dei campi della prima delle tabelle da includere nella query. I nomi dei campi devono essere racchiusi tra parentesi quadre e devono essere separati da virgole. Al termine dell'immissione dei nomi di campo, premere INVIO. Il cursore si sposta in basso di una riga nella visualizzazione SQL.
-
Digitare FROM, seguito dal nome della prima delle tabelle da includere nella query. Premere INVIO.
-
Se si vuole specificare un criterio per un campo dalla prima tabella, digitare WHERE, seguito dal nome del campo, da un operatore di confronto, in genere un segno di uguale (=) e quindi dal criterio. È possibile aggiungere altri criteri alla fine della clausola WHERE usando la parola chiave AND e la stessa sintassi usata per il primo criterio, ad esempio WHERE [ClassLevel]="100" AND [CreditHours]>2. Dopo avere specificato i criteri, premere INVIO.
-
Digitare UNION, quindi premere INVIO.
-
Digitare SELECT, seguito dall'elenco di campi della seconda tabella da includere nella query. I campi da includere di questa tabella devono essere uguali a quelli della prima tabella e devono essere disposti nello stesso ordine. I nomi dei campi devono essere racchiusi tra parentesi quadre e devono essere separati da virgole. Al termine dell'immissione dei nomi di campo, premere INVIO.
-
Digitare FROM, seguito dal nome della seconda tabella da includere nella query. Premere INVIO.
-
Se si vuole, aggiungere una clausola WHERE, come illustrato nel Passaggio 6 di questa procedura.
-
Digitare un punto e virgola (;) per indicare la fine della query.
-
Nel gruppo Risultati della scheda Struttura fare clic su Esegui.
I risultati vengono visualizzati nella visualizzazione Foglio dati.