Indietro | Avanti | Ripeti | Inizio | Aiuto | Esci |
Lezione 4.1 – Creazione di query
In questa lezione si imparerà a conoscere le query e ad utilizzarle per estrarre dati.
Ricordiamo che nel primo capitolo, quando abbiamo parlato in generale dei data base, abbiamo detto anche che, una volta creata una tabella (un insieme di righe - record e di colonne - campi del record o gli attributi della relazione), sarebbe stato possibile applicare a questa relazione base, a questa tabella, degli operatori particolari. Abbiamo accennato all'operatore "selezione", che consente di estrarre dall'insieme delle righe, dei record delle tabelle, solo alcuni record, alcune righe, che rispondono a caratteristiche particolari scelte dall'utente. Abbiamo anche detto che esiste un altro operatore che si può applicare alle tabelle, l'operatore di "proiezione", che consente invece di estrarre alcuni degli attributi, cioè alcune delle colonne, o campi, che appartengono all'insieme definito dalla tabella. Naturalmente è anche possibile applicare i due operatori ed estrarre sia un certo numero di campi appartenenti a un certo numero di record estratti dalla tabella. Esiste poi un altro operatore, che si chiama "join", che consente di creare una specie di tabella virtuale, cioè una tabella che si ottiene unendo fra loro due tabelle che hanno in comune un campo, ad esempio la matricola. Il risultato di questa query è, come dicevo, una tabella virtuale che contiene al suo interno alcuni campi provenienti dalla prima, ed altri provenienti dalla seconda tabella. Ad esempio, se avessimo due file: uno con le testate degli ordini, l'altro con le righe, noi potremmo ottenere con Join una tabella virtuale che mostra tutte le righe, ma ad ogni riga accoppia, ad esempio l'anagrafica del cliente, perché dal codice cliente presente nel file della testata potrebbe risalire ai suoi dati , e la descrizione dell'articolo: infatti, dal codice prodotto presente sulla riga potrebbe risalire alla sua descrizione.
Abbiamo anche detto che un database relazionale, oltre a una sorta di linguaggio che consente di gestire la struttura dei dati, deve necessariamente disporre di un linguaggio che consente di estrarre i dati che sono stati registrati nel database con opportune relazioni. Esse infatti sono state create e vengono mantenute proprio per consentire di estrarre i dati nel modo desiderato dall'utente. Il linguaggio che serve ad estrarre i dati nella maniera prescelta si chiama SQL (structured query language). Quello utilizzato da Access è uno dei diversi "dialetti" dell'SQL esistente. Utilizzando altri prodotti, quindi, si potrebbero trovare linguaggi di interrogazione, cioè SQL lievemente diversi fra loro. Si tratta però di dettagli; una volta conosciuto uno, risulta abbastanza facile imparare anche gli altri.
Gli oggetti che vengono creati in Access per gestire le interrogazioni si chiamano query. Vediamo adesso di applicare in pratica ciò di cui abbiamo parlato finora.
Per prima cosa apriamo il nostro database, quello che abbiamo usato finora e che contiene tutte le nostre tabelle.
Per cominciare, scegliamo la linguetta tabelle, selezioniamo Indirizzi ed esaminiamone la struttura. Essa contiene un campo contatore, poi nome, cognome, data di nascita, sesso, indirizzo, CAP, e infine la località. Per rivederla, puoi aprirla in visualizzazione struttura, come ormai sicuramente sai fare. Quando avrai verificato tutto, richiudi pure la tabella. Seleziona ora la linguetta "query" dalla finestra principale di Access. Premendo il pulsante "Nuovo" (Alt U) troverai alcune scelte: la prima, quella che vogliamo utilizzare ora, è "visualizzazione struttura"; la seconda è "autocomposizione query semplice", la terza "autocomposizione query a campi incrociati", la quarta "autocomposizione ricerca duplicati" e l'ultima "autocomposizione ricerca dati non corrispondenti".
Selezioniamo allora la prima opzione (basta premere OK dato che è già selezionata).
Ci vengono mostrate due finestre: una che per il momento non è attiva e che esamineremo in seguito; l'altra, quella che ci interessa ora, ha tre linguette: Tabelle, Query, Entrambe. In questo momento è selezionata la linguetta Tabelle perché dobbiamo scegliere la tabella su cui vogliamo impostare la query. I pulsanti disponibili sono Aggiungi e Chiudi. Se scorri con le frecce l'elenco delle tabelle, troverai quelle che abbiamo creato: Dati, Esami, Indirizzi e Matricole.
Dopo esserti posizionato sulla tabella Indirizzi, spostati con TAB sul pulsante Aggiungi e premi INVIO. Poi, sempre tramite TAB, scegli il pulsante Chiudi e premi ancora INVIO.
Compare a questo punto, ed è attiva, la finestra che prima era in secondo piano. Esaminiamola in dettaglio perché è abbastanza complessa.
Il titolo di questa finestra è "query1: query di selezione". La finestra, rettangolare, occupa tutta la larghezza dello schermo ed è divisa in due parti: il rettangolo in alto è completamente grigio ed ha, in alto e a destra, le barre di scorrimento, utili per evidenziare elementi che non possono essere contenuti nella finestra in questo momento. Sempre in questa zona vi è una piccola finestra, intitolata indirizzi. Essa contiene tutti i campi della nostra tabella, ed è stata creata nel momento in cui abbiamo scelto la tabella Indirizzi come base della nostra query. Per essere chiari, bisogna notare che questo elenco contiene un campo in più, che è il primo della lista. Si tratta del campo asterisco, che significa "tutti i campi".
Esaminiamo ora la seconda parte della finestra, quella, tra l'altro, su cui si trova il fuoco appena viene mostrata. Si tratta di una specie di tabella o griglia. Di essa dovrebbero essere attualmente visibili sei o sette colonne, e sei righe. Nella parte sinistra di ogni riga vi sono le seguenti intestazioni: campo, tabella, ordinamento, mostra, criteri, oppure. Ho parlato di griglia perché sullo schermo ci sono tanti quadretti. Il tutto è molto "visuale", ma con un po' di attenzione riuscirai sicuramente a familiarizzarti con quanto stai per imparare.
Questa griglia, accoppiata con una o più tabelle che sono state predisposte nella parte alta di questa finestra, consente di creare in forma visuale delle query, cioè delle estrazioni di dati fatte con i criteri che noi desideriamo impostare. Questa costruzione si chiama "query by example", in quanto è possibile prendere materialmente gli oggetti che noi desideriamo e disporli sulla griglia e dare quindi al computer un esempio di ciò che vogliamo ottenere. Da questo esempio Access provvederà a costruire ed eventualmente ad eseguire la query che noi abbiamo richiesto. Per chi non ha problemi, questo metodo viene detto del "drag and drop", cioè si fa clic sul campo desiderato e, tenendo premuto il tasto del mouse, lo si trascina in una delle colonne della riga "campo" della griglia. Questo modo non è così semplice per chi ha problemi, ma esistono altri modi che vedremo insieme, del tutto adatti a chiunque. Uno, molto semplice, consiste nel fare doppio clic sul campo scelto: esso viene portato nella riga Campo della prima colonna libera.
Come ho detto prima, il fuoco di Windows è posizionato sulla prima colonna della riga "campo" della nostra griglia. Se utilizziamo la combinazione di tasti ALT+freccia giù, quella che apre le caselle elenco, potremo, scorrendo l'elenco con freccia giù, ascoltare il nome di tutti i campi della nostra tabella. In questo momento noi vogliamo dire ad Access che desideriamo vedere tutti i campi della nostra tabella, e quindi per far questo dobbiamo scegliere il primo campo dell'elenco, e cioè asterisco. Per sceglierlo, basta che ti posizioni su di esso con freccia giù. Esploriamo adesso che cosa è successo nella nostra griglia. Prima di esplorarla, devi però chiudere la casella elenco, che ti mostrava tutti i campi per darti la possibilità di scegliere quello che volevi. Per farlo, basta premere ESC. Adesso sei pronto per esplorare i cambiamenti che sono avvenuti sulla nostra griglia. Nella prima riga, la riga "campo" prima colonna, troverai la scritta "indirizzi.*". Nella riga "tabella", ovviamente stessa colonna, troverai la scritta "indirizzi". Nella riga successiva, ordinamento, non è indicato nulla. Nella riga "mostra", invece, è stato impostato il segno di spunta. Se non hai una risoluzione adatta o se il grafico che costituisce questa piccola icona non è etichettato, potresti non capire se la casella è attivata oppure no. Ecco. Abbiamo così costruito la nostra prima, semplice query! Ora, vogliamo eseguirla, cioè vederne il risultato. Per farlo, come sempre, ci sono due modi: il primo è quello di andare nel menù query (per farlo premi la combinazione di tasti alt+q o alt e freccia destra fino a raggiungere query), e con freccia giù posizionati su esegui e premi INVIO. Lo stesso comando esegui puoi trovarlo sulla barra degli strumenti (ti ricordo: alt per andare alla barra dei menù, poi ctrl+tab per raggiungere la barra degli strumenti, infine freccia destra o tab per posizionarti su esegui. Naturalmente, se la superi e vuoi tornare indietro, freccia sinistra o maiuscola+tab).
Se tutto è andato bene, dopo aver selezionato la scelta "esegui", ti comparirà una finestra, intitolata "query1: query di selezione", che contiene una tabella con quattro righe e quattro colonne. Le intestazioni sono: ID, COGNOME, NOME, NASCITA, SESSO, INDIRIZZO, CAP, LOCALITA'. Attualmente è selezionata la prima riga. Lo si vede dal fatto che, se leggi il primo campo, troverai scritto "1", primo record, come per la nostra tabella. Inoltre, il quadretto alla sua sinistra è diverso dagli altri perché contiene un triangolo con la punta rivolta verso destra. Se ti sposti con freccia destra o sinistra, potrai scorrere i campi del primo record, mentre freccia giù ti consentirà di passare al secondo e così via. Scorri pure tutta la tabella. Se ti ricordi, i dati che vi si trovano sono proprio quelli inseriti da noi. Ciò significa che con questa semplice operazione abbiamo chiesto ad Access di selezionare l'intero contenuto della nostra tabella. In realtà non si tratta di un grosso risultato, perché avevamo già a disposizione questi dati, ma questo è il punto di partenza per proseguire.
La prima cosa da notare (l'avevo già accennato in precedenza), è che il campo *, che si trova sempre come primo nell'elenco dei campi, indica il fatto che la query verrà costruita utilizzando tutti i campi della tabella. Un'altra cosa significativa è che, se non indico nessuna condizione, verranno mostrati tutti i record della tabella.
Cerchiamo di capire che cosa ha fatto Access a fronte della nostra indicazione. Per farlo, vai nel menù visualizza (alt+v), e scegli l'opzione "visualizzazione SQL". Un'altra possibilità è quella di scegliere "visualizza" dalla barra degli strumenti. Mi piace descriverti anche questo modo perché sarai poi tu a decidere quale modalità usare.
Attualmente è attivata l'opzione "visualizzazione struttura", caratterizzata da un'icona con riga, squadra e matita. L'opzione successiva, "foglio dati" è caratterizzata da una tabellina, e infine l'opzione "visualizzazione SQL", quella che vogliamo scegliere ora, riporta la scritta SQL in grassetto.
OK, scegli allora "visualizzazione sql" e premi INVIO. Ciò che compare è la nostra query, scritta da Access utilizzando il linguaggio SQL. La finestra, intitolata Query1: query di selezione, contiene solo due righe:
SELECT Indirizzi.*
FROM Indirizzi;
Cerchiamo di capirne il significato.
Le parole scritte in minuscolo sono quelle che erano comparse nella parte bassa della finestra, quella che conteneva la griglia, dopo che avevamo scelto l'opzione "*", e precisamente: indirizzi.* che compariva nella riga "campo", e indirizzi che compariva nella riga "tabella". Vediamo quindi che esiste una corrispondenza univoca tra quanto avevamo indicato in modo visuale e quanto è scritto qui in SQL. Il linguaggio SQL, almeno nelle parti elementari che esamineremo in questo corso, è veramente semplice, e contiene pochissime parole chiave. La prima è SELECT, e l'abbiamo appena vista. Significa seleziona. Poi ci sarà l'elenco dei campi tratti dalla tabella. Noi abbiamo messo * per indicare tutti i campi della tabella. Poi la parola chiave "from" ci permette di indicare la tabella (o anche la query) da cui prelevare quei campi. Infatti qui è indicato "from indirizzi" per specificare che i campi devono essere prelevati dalla tabella indirizzi. Alla fine un punto e virgola indica il termine delle istruzioni SQL.
Abbiamo allora creato questa semplice query in modo visuale e ne abbiamo visto la corrispondenza testuale. Possiamo a questo punto chiudere la nostra finestra e, quando ci compare la richiesta di salvare la query, possiamo rispondere di no: non vogliamo infatti tenere traccia di questo. Scegliamo nuovamente l'opzione "crea una query in visualizzazione struttura" per fare un'altra prova. Quando ci compare la finestra "mostra tabelle" per indicare su quale tabella vogliamo lavorare, chiudiamola senza effettuare nessuna scelta. Per farlo, scegli tramite TAB il pulsante "chiudi" e premi INVIO.
Nella finestra che compare, vai nel menù visualizza e scegli l'opzione SQL. Compare a questo punto una finestra quasi vuota. L'unica cosa che troviamo scritta è SELECT;. Vediamo di capire perché.
Esistono vari tipi di query. Quella che stiamo esaminando ora, e non l'abbiamo detto all'inizio, è quella di selezione. Si tratta di una query che si limita a creare una tabella virtuale che mostrerà i dati che noi abbiamo detto di estrarre. Essa non modificherà il nostro database: mostrerà soltanto dei dati, secondo criteri da noi definiti. Esiste però una famiglia di query, le query di comando, che consentono di cancellare dei record secondo criteri definiti, di accodare record ad una tabella, di creare una nuova tabella, e così via. Tutte queste query avranno come parola chiave qualcosa di diverso; quelle di selezione, invece, inizieranno tutte con "SELECT". Se noi guardiamo la proposta che ci sta facendo Access, cioè SELECT;, possiamo continuare la query e scrivere indirizzi.*, dopo aver posizionato il cursore subito prima del punto e virgola. Premiamo INVIO per andare a capo e, in lettere maiuscole, per mantenere la correttezza richiesta da Access, scriviamo "FROM indirizzi". Il punto e virgola, che non avevamo cancellato, conclude la query. Se facessimo eseguire nuovamente la query, otterremmo lo stesso risultato che avevamo avuto prima. Se vuoi rieseguirla, portati alla barra dei menù, scegli query e poi esegui.
Riepiloghiamo allora quanto detto finora. Il linguaggio di interrogazione ci consente di estrarre o tutti i campi dei record che corrispondono a criteri particolari, o soltanto alcuni campi di record che corrispondono a determinati criteri. I record possono essere tutti o solo alcuni. Su una tabella dunque possiamo eseguire le operazioni di selezione (scelta record) o di proiezione (scelta campi). Abbiamo anche visto che una query, un piccolo programma in SQL, può essere creata in due modi: il primo modo è essenzialmente visivo, consiste nel portare i campi che ci interessano nello schema. Il secondo modo, perfettamente equivalente dal punto di vista di ciò che Access memorizza, è quello di scrivere in una finestra bianca, testuale, direttamente le istruzioni SQL. Come abbiamo visto dopo aver creato la query la prima volta, Access riporta le stesse istruzioni. In una query di selezione, quindi, esistono come minimo due parole chiave: select, dopo la quale devono essere indicati i campi da selezionare (* indica tutti), e from, dopo la quale deve essere scritto il nome della tabella da cui prendere i dati.
Abbiamo terminato questa prima parte relativa alle query, in cui abbiamo imparato a creare una semplice query di selezione. Forse è sembrato troppo lungo, ma bisognava mettere le basi per quanto impareremo in seguito.
Chiudiamo la nostra finestra di query senza salvare nulla.
Indietro | Avanti | Ripeti | Inizio | Aiuto | Esci |