Usare una query di unione per combinare più query in un singolo risultato

Usare una query di unione per combinare più query in un singolo risultato

Si supponga che un database di Access contenga due tabelle non correlate, una con i dati dei clienti e l'altra con i dati dei fornitori, e che entrambe includano un campo Informazioni contatto. Per vedere le informazioni di contatto di entrambe le tabelle in un'unica visualizzazione, creare prima di tutto una query di selezione per ogni tabella per recuperare le informazioni, quindi combinare i risultati creando una query di unione.

Nota : Le informazioni di questo articolo sono valide solo con database desktop di Access. Non è possibile creare o usare query di unione nei database o nelle app Web di Access.

Per informazioni su come creare query di selezione di base, vedere Creare una query di selezione semplice.

Prima di creare una query di unione, è importante tenere presente quanto segue:

  • Le query di selezione combinate in una query di unione devono avere lo stesso numero di campi di output, nello stesso ordine e con tipi di dati uguali o compatibili. Quando si esegue una query di unione, i dati di ogni set di campi corrispondenti vengono combinati in un unico campo di output, in modo che l'output della query abbia lo stesso numero di campi di ogni istruzione SELECT.

  • Le query di unione sono specifiche del linguaggio SQL, pertanto devono essere scritte direttamente in SQL. Per scrivere query specifiche di SQL, incluse quelle di unione, passare a Visualizzazione SQL.

Passaggio 1: Creare le query di selezione

Nota : Anche se è possibile includere più tabelle o query in una query, in questa procedura si suppone che in ogni query di selezione siano inclusi i dati da una sola tabella.

  1. Nel gruppo Query della scheda Crea fare clic su Struttura query.

  2. Nella finestra di dialogo Mostra tabella fare doppio clic sulla tabella contenete i campi che si desidera includere. La tabella viene aggiunta alla finestra di struttura della query.

  3. Chiudere la finestra di dialogo Mostra tabella.

  4. Nella finestra di struttura della query fare doppio clic su ognuno dei campi che si desidera includere.
    Mentre si selezionano i campi, assicurarsi di aggiungere lo stesso numero di campi, nello stesso ordine, di quelli aggiunti alle altre query di selezione. Prestare attenzione ai tipi di dati dei campi e verificare che siano compatibili con i tipi di dati dei campi nella stessa posizione delle altre query da combinare. Ad esempio, se per la prima query di selezione si utilizzano cinque campi, il primo dei quali contiene dati di tipo data/ora, assicurarsi che tutte le altre query di selezione da combinare contengano cinque campi e che i dati nel primo di essi siano di tipo data/ora e così via.

  5. È possibile aggiungere facoltativamente criteri ai campi digitando le espressioni appropriate nella riga Criteri della griglia dei campi.

  6. Dopo avere aggiunto i campi e i criteri dei campi, eseguire la query di selezione ed esaminarne l'output. Nel gruppo Risultati della scheda Struttura fare clic su Esegui.

  7. Passare alla visualizzazione Struttura della query.

  8. Salvare la query di selezione e lasciarla aperta.

  9. Ripetere questa procedura per ognuna delle query di selezione che si desidera combinare.

Per altre informazioni sull'uso di criteri in una query, vedere Applicare criteri a una query.

Passaggio 2: Combinare le query di selezione

In questo passaggio verrà creata la query di unione mediante istruzioni SQL. Per altre informazioni, vedere la sezione Sintassi SQL di seguito.

  1. Nel gruppo Query della scheda Crea fare clic su Struttura query.

  2. Chiudere la finestra di dialogo Mostra tabella.

  3. Nel gruppo Query della scheda Struttura fare clic su Unione.

Access nasconde la finestra di struttura della query e visualizza la scheda dell'oggetto Visualizzazione SQL che, a questo punto, è vuota.

  1. Fare clic sulla scheda della prima query di selezione che si desidera combinare nella query di unione.

  2. Nella scheda Home fare clic su Visualizza > Visualizzazione SQL.

  3. Copiare l'istruzione SQL per la query di selezione. Fare clic sulla scheda della query di unione creata a partire dal passaggio 1.

  4. Incollare l'istruzione SQL della query di selezione nella scheda a oggetti Visualizzazione SQL della query di unione.

  5. Eliminare il punto e virgola (;) alla fine dell'istruzione SQL della query di selezione.

  6. Premere INVIO per spostare il cursore di una riga in basso e quindi digitare UNION nella nuova riga.

  7. Fare clic sulla scheda della successiva query di selezione che si desidera combinare nella query di unione.

  8. Ripetere i passaggi da 5 a 10 finché non saranno state copiate e incollate tutte le istruzioni SQL delle query di selezione nella finestra Visualizzazione SQL della query di unione. Non eliminare il punto e virgola né digitare altri dati dopo l'istruzione SQL dell'ultima query di selezione.

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

I risultati della query di unione verranno visualizzati nella visualizzazione Foglio dati.

Inizio pagina

Suggerimenti per l'utilizzo di query di unione

  • Per poter distinguere le tabelle da cui provengono le singole righe, aggiungere una stringa di testo come campo in ogni istruzione Select.

    Se ad esempio un'istruzione SELECT recupera i campi da una tabella chiamata Prodotti (Products) e un'altra istruzione SELECT recupera i campi da una tabella chiamata Servizi (Services), aggiungere la stringa "Product" come campo alla fine della prima istruzione e "Service" alla fine della seconda istruzione. È inoltre possibile aggiungere alle stringhe un alias del campo, ad esempio "type" per indicare il tipo, utilizzando la parola chiave AS come illustrato nell'esempio riportato di seguito:

    SELECT field1, field2, ... "Product" AS type

    SELECT field1, field2, ... "Service" AS type

    Nell'output della query sarà incluso un campo denominato "type" per indicare se la riga è stata recuperata dalla tabella Prodotti (Products) o Servizi (Services).

  • Ogni parola chiave UNION combina le istruzioni SELECT che precedono o seguono immediatamente la parola chiave. Se si utilizza la parola chiave ALL con alcune ma non con tutte le parole chiave UNION della query, nei risultati saranno incluse righe duplicate dalle coppie di istruzioni SELECT combinate utilizzando UNION ALL, ma non le righe duplicate dalle istruzioni SELECT combinate utilizzando UNION senza la parola chiave ALL.

  • Il numero, i tipi di dati e l'ordine dei campi nelle query di selezione devono corrispondere. A tale scopo, è possibile utilizzare espressioni, come calcoli o sottoquery.

    Ad esempio, è possibile fare in modo che un campo dell'anno a due cifre corrisponda a un campo dell'anno a quattro cifre utilizzando la funzione Right per estrarre le ultime due cifre dell'anno a quattro cifre.

Utilizzo dei risultati di una query di unione per creare una nuova tabella

In primo luogo, usare la query di unione come input di una nuova query di selezione che potrà quindi essere usata come base di una query di creazione tabella, come descritto nei passaggi seguenti:

  1. Creare e salvare la query di unione.

  2. Nel gruppo Query della scheda Crea fare clic su Struttura query.

  3. Nella finestra di dialogo Mostra tabella fare clic sulla scheda Query.

  4. Fare doppio clic sulla query di unione, quindi chiudere la finestra di dialogo Mostra tabella.

    Nota : Se sulla barra dei messaggi viene visualizzato un avviso di sicurezza, è possibile che le query di comando siano disabilitate. Per abilitarle, fare clic su Abilita contenuto sulla barra dei messaggi.

  5. Nella scheda dell'oggetto della query di unione, nella griglia di struttura della query, fare doppio clic sull'asterisco (*) per usare tutti i campi della query di unione per creare una nuova tabella.

  6. Nel gruppo Tipo di query della scheda Struttura fare clic su Creazione tabella.

  7. Nella finestra di dialogo Creazione tabella digitare un nome per la nuova tabella.

  8. Se si desidera, specificare un database diverso in cui creare la tabella.

  9. Fare clic su OK.

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

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

È possibile utilizzare una query di unione per eseguire un full outer join che non limita le righe restituite da una delle tabelle unite in join, ma combina le righe sulla base dei valori contenuti nel campo di 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.
    I risultati della query di unione verranno visualizzati nella visualizzazione Foglio dati.

Per altre informazioni, vedere Collegare origini dati tramite join in una query.

Inizio pagina

Requisiti e sintassi SQL per una query di unione

Alcuni requisiti per una query di unione

  • Le query di selezione combinate in una query di unione devono avere lo stesso numero di campi di output, nello stesso ordine e con tipi di dati uguali o compatibili. Quando si esegue una query di unione, i dati di ogni set di campi corrispondenti vengono combinati in un unico campo di output, in modo che l'output della query abbia lo stesso numero di campi di ogni istruzione SELECT.

    Nota : Ai fini di una query di unione, i tipi di dati Numero e Testo sono compatibili.

  • Le query di unione sono specifiche del linguaggio SQL, pertanto devono essere scritte direttamente in SQL. Per scrivere query specifiche di SQL, incluse quelle di unione, passare a Visualizzazione SQL.

Sintassi SQL di una query di unione

In una query di unione ogni query di selezione (denominata anche istruzione SELECT) contiene le clausole seguenti:

Clausola

Contiene un elenco di...

SELECT

Campi contenenti i dati da recuperare.

FROM

Tabelle contenenti tali campi.

WHERE facoltativa

Criteri per tali campi.

Per combinare le istruzioni SELECT si usa la parola chiave UNION.

Di seguito è riportata la sintassi SQL di base per una query di unione:

SELECT field_1[, field_2,…]
FROM table_1[, table_2,…]
UNION [ALL]
SELECT field_a[, field_b,...]
FROM table_a[, table_b,…];

Si supponga, ad esempio, che il database in uso contenga una tabella denominata Prodotti (Products) e un'altra denominata Servizi (Services) e in entrambe le tabelle siano presenti campi che contengono il nome (name) del prodotto o del servizio, il prezzo (price), la disponibilità di una garanzia o un'assicurazione (warranty available) e l'eventuale offerta esclusiva (exclusive offer) del prodotto o del servizio. Anche se nella tabella Prodotti sono archiviate informazioni relative a una garanzia, mentre nella tabella Servizi sono archiviate informazioni relative a un'assicurazione, le informazioni sono fondamentalmente le stesse, ovvero specificano se un particolare prodotto o servizio viene fornito con una promessa di qualità. Utilizzando una query di unione come quella riportata di seguito è possibile combinare i quattro campi delle due tabelle:

SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services;

Esaminiamo la sintassi dell'esempio precedente, riga per riga:

Sintassi

Spiegazione

Informazioni aggiuntive

SELECT name, price, warranty_available, exclusive_offer

Prima clausola SELECT

La clausola SELECT è seguita da un elenco di identificatori che indicano i campi da cui recuperare i dati.

In una clausola SELECT deve sempre essere elencato almeno un campo.

Per questa clausola SELECT vengono elencati gli identificatori di campo name, price, warranty_available e exclusive_offer.

FROM Products

Prima clausola FROM

Una clausola FROM segue la clausola SELECT e insieme formano un'istruzione SELECT di base.

FROM è seguita da un elenco di identificatori che indicano le tabelle contenenti i campi elencati nella clausola SELECT.

In una clausola FROM deve sempre essere elencata almeno una tabella.

Per questa clausola FROM viene elencato l'identificatore di tabella Products.

UNION ALL

Parola chiave UNION e parola chiave facoltativa ALL

I risultati dell'istruzione SELECT che precede UNION vengono combinati con i risultati dell'istruzione SELECT che segue UNION.

Quando si utilizza la parola chiave ALL, le righe duplicate non vengono rimosse dai risultati della query di unione.

La parola chiave ALL consente di velocizzare l'esecuzione della query, perché evita la ricerca automatica delle righe duplicate.

Usare la parola chiave ALL in uno di questi casi:

  • Si è certi che le query di selezione non produrranno righe duplicate.

  • La presenza di righe duplicate nei risultati è ininfluente.

  • Si desidera visualizzare le righe duplicate.

SELECT name, price, guarantee_available, exclusive_offer

Seconda clausola SELECT

Alcune regole:

  • Il numero di campi della seconda clausola SELECT deve essere uguale a quello della prima clausola SELECT.

  • I campi che condividono dati comuni devono essere visualizzati nello stesso ordine nella clausola.

  • I campi che condividono dati comuni devono avere tipi di dati uguali o compatibili.

Nota : I nomi dei campi nell'output di una query di unione derivano dalla prima clausola SELECT. Per questo motivo, nell'output della query dell'esempio viene assegnato il nome "warranty_available" ai dati del campo "warranty_available" e a quelli del campo "guarantee_available".

FROM Services

Seconda clausola FROM

Non esistono restrizioni per quanto riguarda le tabelle nelle clausole FROM di una query di unione. È possibile creare una query di unione in cui per ogni clausola FROM vengono usate le stesse tabelle. Inoltre, nelle clausole FROM è possibile usare numeri di tabelle diversi. Nell'esempio precedente per ogni clausola FROM viene usata una sola tabella.

Inizio pagina

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

Queste informazioni sono risultate utili?

Grazie per i tuoi commenti e suggerimenti

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

×