Linguaggio SQL per Access: nozioni fondamentali, terminologia e sintassi
Applies ToAccess per Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Quando si vogliono recuperare dati da un database, è possibile farlo usando il linguaggio SQL (Structured Query Language). SQL è un linguaggio di programmazione molto simile alla lingua inglese, ma comprensibile per i programmi di database. Per ogni query eseguita viene usato il linguaggio SQL in background.

Se si comprende il funzionamento del linguaggio SQL è possibile creare query più efficaci e correggere in modo più semplice eventuali query che non restituiscono i risultati desiderati.

Questo articolo fa parte di un gruppo di articoli relativi al linguaggio SQL per Access. Descrive l'uso di base di SQL per la selezione dei dati e illustra la sintassi SQL con alcuni esempi.

In questo articolo

Che cos'è SQL?

SQL è un linguaggio di programmazione per la gestione di serie di fatti e delle relative relazioni. I programmi di database relazionale, come Microsoft Office Access, usano SQL per gestire i dati. A differenza altri linguaggi, SQL è di facile lettura e comprensione, anche per gli utenti meno esperti. Analogamente a molti altri linguaggi, SQL è uno standard internazionale riconosciuto da organismi come ISO e ANSI.

Usare SQL per descrivere set di dati che consentano di rispondere alle domande. Per SQL è necessario usare la sintassi corretta. Per sintassi si intende la serie di regole in base alle quali gli elementi di un linguaggio vengono combinati correttamente. La sintassi di SQL si basa su quella della lingua inglese e usa molti elementi uguali a quelli della sintassi di Visual Basic, Applications Edition (VBA).

Ad esempio, una semplice istruzione SQL per il recupero di un elenco di cognomi di contatti con nome Mary può essere simile alla seguente:

SELECT Last_NameFROM ContactsWHERE First_Name = 'Mary';

Nota: Oltre che per la modifica dei dati, il linguaggio SQL viene usato per creare e modificare la struttura degli oggetti di database, ad esempio delle tabelle. La parte del linguaggio SQL usata per la creazione e la modifica di oggetti di database è denominata DDL (Data-Definition Language). Questo aspetto non viene trattato in questo argomento. Per altre informazioni, vedere l'articolo Creare o modificare tabelle o indici usando una query di definizione dei dati.

Istruzioni SELECT

Per descrivere un set di dati tramite SQL, è necessario scrivere un'istruzione SELECT. Un'istruzione SELECT contiene la descrizione completa del set di dati da ottenere da un database. La descrizione include:

  • Le tabelle che contengono i dati.

  • Il tipo di relazione tra dati di origini diverse.

  • I campi o i calcoli che generano i dati.

  • I criteri che devono essere rispettati per l'inclusione.

  • L'eventuale ordinamento dei risultati.

Clausole SQL

Analogamente a una frase, un'istruzione SQL include clausole. Ogni clausola esegue una funzione per l'istruzione SQL. Alcune clausole sono necessarie in un'istruzione SELECT. La tabella seguente elenca le clausole SQL più comuni.

Clausola SQL

Funzione

Obbligatorio

SELECT

Elenca i campi che contengono i dati di interesse.

FROM

Elenca le tabelle che contengono i campi elencati nella clausola SELECT.

WHERE

Specifica i criteri di campo che ogni record deve soddisfare perché sia incluso nei risultati.

No

ORDER BY

Specifica il tipo di ordinamento dei risultati.

No

GROUP BY

In un'istruzione SQL contenente funzioni di aggregazione, elenca i campi non riepilogati nella clausola SELECT.

Solo se sono presenti campi di questo tipo

HAVING

In un'istruzione SQL contenente funzioni di aggregazione, specifica le condizioni che si applicano ai campi riepilogati nell'istruzione SELECT.

No

Termini SQL

Ogni clausola SQL è costituita da termini, paragonabili a parti del discorso. La tabella seguente elenca alcuni tipi di termini SQL.

Termine SQL

Parte del discorso analoga

Definizione

Esempio

identificatore

nome

Nome usato per identificare un oggetto di database, ad esempio il nome di un campo.

Clienti.[Numero telefono]

operatore

verbo o avverbio

Parola chiave che rappresenta un'azione o modifica un'azione.

AS

costante

nome

Valore che non viene modificato, ad esempio un numero o NULL.

42

espressione

aggettivo

Combinazione di identificatori, operatori, costanti e funzioni che restituisce un unico valore.

>= Prodotti.[Prezzo unitario]

Inizio pagina

Clausole SQL fondamentali: SELECT, FROM e WHERE

In generale, un'istruzione SQL si presenta nella forma seguente:

SELECT field_1FROM table_1WHERE criterion_1;

Note: 

  • In Access le interruzioni di riga all'interno delle istruzioni SQL vengono ignorate. Per consentire una migliore leggibilità delle istruzioni SQL create, è consigliabile usare una riga per ogni clausola.

  • Ogni istruzione SELECT termina con un punto e virgola (;). Il punto e virgola può trovarsi alla fine dell'ultima clausola o in una riga a sé stante alla fine dell'istruzione SQL stessa.

Esempio in Access

L'esempio illustra come appare in Access un'istruzione SQL per una semplice query di selezione:

Scheda di oggetto SQL con istruzione SELECT

1. Clausola SELECT

2. Clausola FROM

3. Clausola WHERE

Questa istruzione SQL di esempio significa "Seleziona i dati memorizzati nei campi denominati E-mail Address e Company della tabella denominata Contacts, per la precisione i record in cui il valore del campo City è Seattle".

Esaminiamo ora l'esempio, una clausola alla volta, per comprendere il funzionamento della sintassi SQL.

Clausola SELECT

SELECT [E-mail Address], Company

Questa è la clausola SELECT. È costituita da un operatore (SELECT) seguito da due identificatori, ovvero [E-mail Address] e Company.

Se un identificatore contiene spazi o caratteri speciali, come "E-mail Address", deve essere racchiuso tra parentesi quadre.

Nella clausola SELECT non è necessario specificare le tabelle che contengono i campi e non è possibile specificare le condizioni che i dati devono soddisfare perché siano inclusi nei risultati.

In un'istruzione SELECT, la clausola SELECT deve sempre precedere la clausola FROM.

Clausola FROM

FROM Contacts

Questa è la clausola FROM. È costituita da un operatore (FROM) seguito da un identificatore (Contacts).

Nella clausola FROM non sono elencati i campi da selezionare.

Clausola WHERE

WHERE City="Seattle"

Questa è la clausola WHERE. È costituita da un operatore (WHERE) seguito da un'espressione (City="Seattle").

Nota: A differenza delle clausole SELECT e FROM, la clausola WHERE non rappresenta un elemento obbligatorio di un'istruzione SELECT.

Con le clausole SELECT, FROM e WHERE è possibile eseguire molte delle azioni consentite dal linguaggio SQL. Per altre informazioni sull'uso di queste clausole, vedere questi articoli:

Inizio pagina

Ordinamento dei risultati: ORDER BY

Come Microsoft Office Excel, Access consente di ordinare i risultati delle query in un foglio dati. Nella query si può anche specificare come ordinare i risultati quando viene eseguita, usando una clausola ORDER BY. Se si usa una clausola ORDER BY, questa deve essere l'ultima clausola dell'istruzione SQL.

La clausola ORDER BY contiene l'elenco dei campi da usare per l'ordinamento, nello stesso ordine in cui si vuole ordinarli.

Si supponga, ad esempio, di ordinare i risultati prima in base al valore del campo Company in ordine decrescente e, se per alcuni record il valore di Company è lo stesso, di ordinare questi ultimi in base al valore del campo E-mail Address in ordine crescente. In questo caso, la clausola ORDER BY è simile alla seguente:

ORDER BY Company DESC, [E-mail Address]

Nota: Per impostazione predefinita, Access ordina i valori in ordine crescente (A-Z, dal più piccolo al più grande). Per ordinare i valori in ordine decrescente, invece, usare la parola chiave DESC.

Per altre informazioni sulla clausola ORDER BY, vedere l'argomento Clausola ORDER BY.

Inizio pagina

Uso di dati riepilogati: GROUP BY e HAVING

In alcuni casi è necessario usare dati riepilogati, ad esempio il totale delle vendite di un mese o gli articoli più costosi di un magazzino. A questo scopo si applica una funzione di aggregazione a un campo nella clausola SELECT. Se ad esempio si vuole che la query mostri il totale degli indirizzi di posta elettronica elencati per ogni società, la clausola SELECT può essere simile alla seguente:

SELECT COUNT([E-mail Address]), Company

Le funzioni di aggregazione che è possibile usare dipendono dal tipo di dati presente nel campo o nell'espressione che si intende usare. Per altre informazioni sulle funzioni di aggregazione disponibili, vedere l'articolo Funzioni di aggregazione SQL.

Indicazione di campi non usati in una funzione di aggregazione: clausola GROUP BY

Quando si usano funzioni di aggregazione, in genere è necessario creare anche una clausola GROUP BY. Una clausola GROUP BY elenca tutti i campi a cui una funzione di aggregazione non viene applicata. Se si applicano funzioni di aggregazione a tutti i campi di una query, non è necessario creare la clausola GROUP BY.

La clausola GROUP BY segue immediatamente la clausola WHERE o la clausola FROM, se la clausola WHERE non è presente. Una clausola GROUP BY elenca i campi nell'ordine in cui sono presentati nella clausola SELECT.

Se, riprendendo l'esempio precedente, nella clausola SELECT viene applicata una funzione di aggregazione al campo [E-mail Address] ma non al campo Company, la clausola GROUP BY sarà simile alla seguente:

GROUP BY Company

Per altre informazioni sulla clausola GROUP BY, vedere l'argomento Clausola GROUP BY.

Limitazione dei valori di aggregazione mediante l'uso di criteri di raggruppamento: clausola HAVING

Se si vogliono usare criteri per limitare i risultati ma il campo a cui si vogliono applicare i criteri è usato in una funzione di aggregazione, non è possibile usare una clausola WHERE. In questo caso si usa una clausola HAVING. La clausola HAVING funziona in modo analogo alla clausola WHERE ma viene usata per dati di aggregazione.

Si supponga ad esempio di usare la funzione COUNT, che calcola un valore medio, con il primo campo della clausola SELECT:

SELECT COUNT([E-mail Address]), Company

Se si vuole che la query limiti i risultati in base al valore di quella funzione COUNT, non è possibile usare un criterio per quel campo nella clausola WHERE. Il criterio viene invece inserito in una clausola HAVING. Se ad esempio si vuole che la query restituisca righe solo se alla società (Company) sono associati più indirizzi di posta elettronica (E-mail Address), la clausola HAVING sarà simile alla seguente:

HAVING COUNT([E-mail Address])>1

Nota: All'interno di una query possono essere presenti una clausola WHERE e una clausola HAVING. I criteri per i campi non usati in una funzione di aggregazione fanno parte della clausola WHERE e i criteri per i campi usati all'interno di funzioni di aggregazione fanno parte della clausola HAVING.

Per altre informazioni sulla clausola HAVING, vedere l'argomento Clausola HAVING.

Inizio pagina

Combinazione dei risultati di query: UNION

Per rivedere contemporaneamente, come set combinato, tutti i dati restituiti da più query di selezione analoghe, è possibile usare l'operatore UNION.

L'operatore UNION consente di combinare due istruzioni SELECT in una sola. Le istruzioni SELECT combinate devono avere lo stesso numero di campi di output, nello stesso ordine e con tipi di dati uguali o compatibili. Quando si esegue la query, 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 ognuna delle istruzioni select.

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

Quando si usa l'operatore UNION, è possibile anche specificare se i risultati della query devono includere eventuali righe duplicate. A questo scopo, usare la parola chiave ALL.

Di seguito è riportata la sintassi SQL di base per una query di unione che combina due istruzioni SELECT:

SELECT field_1FROM table_1UNION [ALL]SELECT field_aFROM table_a;

Si supponga, ad esempio, di avere una tabella denominata Products e un'altra denominata Services. In entrambe le tabelle sono presenti campi che contengono il nome del prodotto o del servizio, il prezzo, la disponibilità di una garanzia o un'assicurazione e l'eventuale offerta esclusiva del prodotto o del servizio. Anche se nella tabella Products sono memorizzate informazioni relative a una garanzia, mentre nella tabella Services sono memorizzate 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à. Con una query di unione come quella riportata di seguito è possibile combinare i quattro campi delle due tabelle:

SELECT name, price, warranty_available, exclusive_offerFROM ProductsUNION ALLSELECT name, price, guarantee_available, exclusive_offerFROM Services;

Per altre informazioni su come combinare istruzioni SELECT con l'operatore UNION, vedere Combinare i risultati di più query di selezione usando una query di unione.

Inizio pagina

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.