Linguaggio SQL per Access: nozioni fondamentali, terminologia e sintassi

Quando si desidera recuperare dati da un database, è possibile eseguire questa operazione utilizzando il linguaggio SQL (Structured Query Language). SQL è un linguaggio di programmazione molto simile alla lingua inglese ma comprensibile per i programmi per database. Per ogni query eseguita viene utilizzato il linguaggio SQL in modo trasparente.

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.

Il presente articolo fa parte di un insieme di articoli relativi al linguaggio SQL per Access. In questo articolo sono descritte le nozioni fondamentali sull'utilizzo di SQL per la selezione dei dati e viene illustrata la sintassi di SQL tramite alcuni esempi.

In questo articolo

Informazioni su SQL

Clausole SQL fondamentali: SELECT, FROM e WHERE

Ordinamento dei risultati: ORDER BY

Utilizzo di dati riepilogati: GROUP BY e HAVING

Combinazione dei risultati di query: UNION

Informazioni su SQL

SQL è un linguaggio del computer 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.

"SQL è di facile lettura e comprensione, anche per gli utenti meno esperti".

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 il cui nome è Mary può essere simile alla seguente:

SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';

Nota : Oltre che per la modifica dei dati, il linguaggio SQL viene utilizzato per creare e modificare la struttura degli oggetti di database, ad esempio delle tabelle. La parte del linguaggio SQL utilizzata per la creazione e la modifica di oggetti di database è denominata DDL (Data-Definition Language). In questo argomento DDL non viene trattato. Per ulteriori informazioni, vedere l'articolo Creare o modificare tabelle o indici utilizzando 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 che si desidera ottenere da un database. Nella descrizione sono incluse le informazioni seguenti:

  • 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

Un'istruzione SQL è composta da clausole, ognuna delle quali esegue una funzione dell'istruzione SQL stessa. In un'istruzione SELECT alcune clausole sono obbligatorie. Nella tabella seguente sono elencate le clausole SQL più comuni.

Clausola SQL

Funzione

Obbligatoria

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. Nella tabella seguente sono elencati alcuni tipi di termini SQL.

Termine SQL

Parte del discorso analoga

Definizione

Esempio

identificatore

nome

Nome utilizzato 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_1
FROM table_1
WHERE 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, tuttavia, è consigliabile utilizzare 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

Nell'esempio seguente viene illustrato 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 ([E-mail Address] e Company).

Se un identificatore contiene spazi o caratteri speciali (ad esempio "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 ulteriori informazioni sull'utilizzo di queste clausole, vedere questi ulteriori articoli:

Inizio pagina

Ordinamento dei risultati: ORDER BY

Analogamente a Microsoft Office Excel, Access consente di ordinare i risultati delle query in un foglio dati. È inoltre possibile specificare nella query come si desidera ordinare i risultati quando la query viene eseguita, utilizzando una clausola ORDER BY. Se si utilizza una clausola ORDER BY, questa deve essere l'ultima clausola dell'istruzione SQL.

La clausola ORDER BY contiene l'elenco dei campi che si desidera utilizzare per l'ordinamento, nello stesso ordine in cui si desidera 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 dispone i valori in ordine crescente (dalla A alla Z, dal più piccolo al più grande). Per disporli in ordine decrescente, usare la parola chiave DESC.

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

Inizio pagina

Utilizzo di dati riepilogati: GROUP BY e HAVING

In alcuni casi è necessario utilizzare dati riepilogati, ad esempio il totale delle vendite di un mese o gli articoli più costosi di un magazzino. A tale scopo, nella clausola SELECT è possibile applicare una funzione di aggregazione a un campo. Se, ad esempio, si desidera 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 utilizzare dipendono dal tipo dei dati presenti nel campo o nell'espressione che si desidera utilizzare. Per ulteriori informazioni sulle funzioni di aggregazione disponibili, vedere l'articolo Funzioni di aggregazione SQL.

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

Quando si utilizzano funzioni di aggregazione, è di solito necessario creare inoltre una clausola GROUP BY. In una clausola GROUP BY sono elencati 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. Nella clausola GROUP BY sono elencati 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'utilizzo di criteri di raggruppamento: clausola HAVING

Se si desidera utilizzare criteri per limitare i risultati ma il campo a cui si desidera applicare i criteri è utilizzato in una funzione di aggregazione, non è possibile utilizzare una clausola WHERE. In questo caso si utilizza una clausola HAVING. La clausola HAVING funziona in modo analogo alla clausola WHERE ma viene utilizzata per dati di aggregazione.

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

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

Se si desidera limitare i risultati della query in base al valore della funzione Conteggio, non è possibile utilizzare un criterio per questo campo nella clausola WHERE. È invece possibile inserire il criterio in una clausola HAVING. Se, ad esempio, si desidera 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 utilizzati in una funzione di aggregazione fanno parte della clausola WHERE e i criteri per i campi utilizzati 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

Se si desidera rivedere contemporaneamente, come set combinato, tutti i dati restituiti da più query di selezione analoghe, è possibile utilizzare 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 la query viene eseguita, i dati di ogni set di campi corrispondenti vengono combinati in un unico campo di output. L'output della query avrà quindi lo stesso numero di campi di ognuna delle istruzioni SELECT.

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

Quando si utilizza l'operatore UNION, è inoltre possibile specificare se i risultati della query devono includere eventuali righe duplicate. A tale scopo, utilizzare la parola chiave ALL.

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

SELECT field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM 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à. 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
;

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

Inizio pagina

Queste informazioni sono risultate utili?

Ottimo! Altri commenti?

Cosa possiamo migliorare?

Grazie per i tuoi commenti e suggerimenti

×