Come imparare le query SQL su Access: guida pratica per principianti

Microsoft Access rimane, in molte aziende, lo strumento di interrogazione rapida per sfruttare file locali o fonti ODBC. Il motore ACE (successore di Jet), sempre integrato in Microsoft 365, esegue applicazioni interne a volte vecchie di decenni. Imparare a scrivere query SQL direttamente in Access permette di comprendere cosa genera la griglia QBE in background e di intervenire quando il risultato non corrisponde a quanto atteso.

Jet/ACE SQL e SQL standard: cosa accetta Access e cosa rifiuta

La maggior parte dei tutorial SQL online utilizza MySQL, PostgreSQL o SQL Server come riferimento. Gli esempi funzionano spesso così com’è su questi motori, ma non sempre su Access. Il dialetto SQL di Access (Jet/ACE SQL) ha particolarità che disorientano i principianti abituati a copiare e incollare codice trovato in un forum.

Access non supporta né le CTE (WITH) né le funzioni finestra disponibili in SQL Server o PostgreSQL. Qualsiasi query ricorsiva o analitica trovata online dovrà essere riscritta, spesso con l’ausilio di sottoquery annidate o di query temporanee registrate.

D’altra parte, Access offre la clausola TRANSFORM per le query incrociate, una sintassi assente nello standard SQL. Questa clausola consente di ruotare righe in colonne senza passare per un foglio di calcolo. Coloro che desiderano imparare le query SQL su Access risparmiano tempo identificando queste differenze fin dall’inizio, piuttosto che cercare il motivo per cui un esempio generico provoca un errore di sintassi.

Un’altra differenza notevole: la sintassi di join. Access impone spesso parentesi annidate ogni volta che si concatenano più JOIN in una stessa query, mentre altri motori accettano una scrittura lineare. Dimenticare queste parentesi genera un errore di compilazione senza messaggio esplicito.

Uomo in uno spazio di coworking che consulta query SQL su Microsoft Access con un foglietto stampato posato sulla scrivania

Modalità SQL di Access: passare dalla grafica alla scrittura diretta

Il progettista di query grafico (griglia QBE) è il punto di ingresso abituale in Access. Ogni azione, trascinare un campo, selezionare una casella di ordinamento, impostare un criterio, genera SQL in background. Passare alla modalità SQL (scheda “Visualizza” poi “Modalità SQL”) mostra la query così come il motore ACE la eseguirà.

Leggere prima di scrivere

Prima di redigere una query da zero, il metodo più efficace consiste nel costruire la query in modalità grafica e poi leggere il SQL prodotto. Questa lettura consente di associare ogni elemento visivo (tabella, collegamento, criterio) alla sua traduzione SQL. Si riconosce rapidamente la struttura SELECT, FROM, WHERE, ORDER BY.

Una volta acquisita questa corrispondenza, modificare direttamente il SQL diventa naturale. Si aggiunge una funzione, si sostituisce un criterio, si inserisce un GROUP BY, il tutto senza dover tornare alla griglia.

I comandi di base nel contesto di Access

  • SELECT e FROM: selezionare campi da una o più tabelle. Access utilizza il punto per separare il nome della tabella dal nome del campo (Clients.Nome), e le parentesi quadre per racchiudere i nomi contenenti spazi o caratteri speciali ([Data di ordine]).
  • WHERE: filtrare i record. Gli operatori di confronto classici funzionano, ma i caratteri jolly differiscono: Access utilizza l’asterisco (*) invece del percentuale (%) con l’operatore LIKE.
  • JOIN: collegare le tabelle tra loro. Access privilegia la sintassi INNER JOIN, LEFT JOIN, RIGHT JOIN con la restrizione delle parentesi multiple menzionata in precedenza.
  • ORDER BY e GROUP BY: ordinare e raggruppare. La clausola HAVING funziona come nello SQL standard, il che semplifica il filtraggio dopo l’aggregazione.

Errori frequenti quando si inizia con SQL su Access

<pAlcuni errori si ripetono sistematicamente tra i principianti. Identificarli in anticipo evita ore di debug frustrante.

Il primo riguarda le parentesi quadre mancanti attorno ai nomi dei campi. Non appena un nome di colonna contiene uno spazio, un accento o un carattere riservato, Access richiede le parentesi quadre. Scrivere Data di ordine invece di [Data di ordine] provoca un errore immediato.

Il secondo riguarda i tipi di dati. Access distingue le virgolette doppie per il testo in alcune versioni e le virgolette singole in altri contesti. Il cancelletto (#) racchiude le date: WHERE [Data di ordine] > #01/01/2024#. Utilizzare virgolette al posto del cancelletto per una data è una fonte di confusione molto comune.

Il terzo errore riguarda le join multiple. Ogni coppia di JOIN deve essere racchiusa in parentesi quando si superano le due tabelle. Il messaggio di errore visualizzato da Access in questo caso è poco esplicito, il che spinge molti principianti ad abbandonare la query SQL per tornare alla griglia grafica.

Adolescente che studia le query SQL su Access nella sua camera con un manuale di database e schede di revisione appese al muro

Progredire oltre le query SELECT su Access

Una volta padroneggiate le query di selezione, Access apre la porta alle query di azione: INSERT INTO, UPDATE e DELETE. Questi comandi funzionano in modo simile allo SQL standard, con una precauzione aggiuntiva: Access esegue le query di azione senza chiedere conferma per impostazione predefinita se gli avvisi sono disattivati nelle opzioni del database.

Testare prima in modalità selezione (trasformare temporaneamente l’UPDATE in SELECT per verificare le righe mirate) rimane una buona pratica prima di qualsiasi modifica ai dati.

Le query incrociate, accessibili tramite la clausola TRANSFORM, meritano di essere approfondite. Consentono di produrre una tabella di sintesi direttamente utilizzabile, senza esportare in Excel. La sintassi è specifica per Access: TRANSFORM seguito dalla funzione di aggregazione, poi un SELECT classico completato da un PIVOT sul campo da trasporre in colonne.

Per coloro che desiderano connettere Access a fonti esterne (SQL Server, file CSV tramite ODBC), le query SQL passthrough costituiscono un’opzione avanzata. Inviando il SQL direttamente al server remoto, si aggirano così le limitazioni del motore ACE. Il SQL scritto in questa modalità deve rispettare la sintassi del server di destinazione, non quella di Access.

Il dialetto SQL di Access ha i suoi limiti, ma offre un terreno di apprendimento concreto per chi lavora già con questo strumento quotidianamente. Padroneggiare le particolarità di Jet/ACE SQL evita di riprodurre ciecamente esempi inadeguati e fornisce una base solida per migrare poi verso motori più potenti.

Come imparare le query SQL su Access: guida pratica per principianti