Indietro Avanti Ripeti Inizio Aiuto Esci

In questa lezione impareremo a creare query di selezione con raggruppamenti, ed eventualmente sottocondizioni per quanto riguarda i record raggruppati.

Per prima cosa, come al solito, apriamo il nostro database. Selezioniamo la scheda tabelle, poi la tabella Indirizzi, ed apriamola col comando ALT+A. Infatti, per le prove che vogliamo fare in questa lezione, non ci bastano i quattro record che abbiamo inserito finora. Il modo più veloce per inserire dei dati, avendo sempre sott'occhio la tabella, è quello di utilizzare direttamente la tabella in cui si desidera inserirli. Posizionati adesso sul primo record vuoto (CTRL+fine e poi freccia giù). Ti troverai sul campo contatore che ti consiglio di lasciare vuoto. A mo' di esercizio, scrivi i seguenti dati (ti ricordo di utilizzare TAB per passare da un campo all'altro):

Giovannini Giovanni 05/09/65 M Via Leonardo da Vinci, 4 40138 Bologna

Governato Giulia 16/4/62 F via Bernardini, 12 20125 Milano

Benedetti Francesca 22/01/64 F via Mazzini, 27 20100 Milano

Verdi Franca 18/06/60 F Via Garibaldi, 25 20134 Milano

A questo punto abbiamo 8 record e possiamo dire che per effettuare le nostre prove la tabella sia completa. Possiamo quindi chiuderla, scegliere l'etichetta query, selezionare la query "prova1" che abbiamo usato finora, e con alt+t aprirla in modalità visualizzazione struttura.

Se vedrai il testo SQL invece della griglia di impostazione, vai nel menù visualizza e scegli visualizzazione struttura. Togliamo poi le condizioni che avevamo impostato nella lezione precedente (nei criteri della colonna sesso togli =m e nell'oppure della colonna ID >2). Togli anche nella riga ordinamento del campo cognome l'indicazione crescente.

Ora abbiamo tolto tutte le condizioni e siamo liberi di operare. Torniamo in visualizzazione SQL perché è così che vogliamo operare. Vediamo la nostra semplicissima query. Rendiamola ancora più semplice cancellando tutti i campi dalla riga SELECT, ad eccezione del campo SESSO. Essa diventerà quindi:

SELECT Indirizzi.sesso,

Aggiungi nella stessa riga:

count(sesso)

Poi spostati sul punto e virgola dopo "from indirizzi", premi INVIO per portare il punto e virgola nella riga successiva e scrivi:

group by sesso

Proviamo ad eseguire questa query e vediamo cosa accade.

Ci viene presentata una tabellina con due colonne: una ha l'intestazione SESSO, l'altra Expr1001. Sotto sesso, la prima riga contiene f, Expr1001 contiene 5; l'ultima riga sotto sesso contiene M, Expr1001 contiene 3. Per capire il significato di questo risultato, dobbiamo riconsiderare la tabella come l'avevamo lasciata, dopo l'inserimento degli ultimi record. Essa era composta da otto record. In cinque di essi il campo sesso conteneva F, negli altri tre, M. La nuova parola chiave SQL che abbiamo appena imparato, consente di ottenere non più record singoli, ma raggruppati secondo il contenuto di un campo. In questo caso il campo era sesso e, dato che i suoi valori erano soltanto due, abbiamo ottenuto come risultato solo due righe. Torniamo alla visualizzazione SQL per analizzare cosa abbiamo richiesto ad Access. Abbiamo richiesto di mostrarci solo il campo sesso (select indirizzi.sesso), e di contarci (count significa conta), tutti gli elementi che hanno lo stesso sesso. Le righe FROM e GROUP BY le abbiamo già esaminate prima. L'unica cosa che non abbiamo ancora spiegato è il perché dell'intestazione "expr1001" nella tabella del risultato. In effetti questa è un'espressione, e mentre per la colonna sesso è chiaro ciò che significa (campo sesso), per il risultato numerico Access non sa che intestazione dare. Vediamo di correggere questa intestazione in modo che essa sia più chiara. Correggi il testo della query come segue:

SELECT sesso,

count(sesso) as num

FROM Indirizzi

group by sesso;

L'unica cosa che abbiamo modificato è stata l'aggiunta del parametro "as num" (as in Inglese significa come), per dire che l'intestazione deve essere num (avremmo potuto scrivere qualsiasi cosa dopo as).

Se provi ad eseguire la query, troverai che le due intestazioni di colonna sono, ora, SESSO e NUM.

Controlliamo anche come si presenta la query in visualizzazione struttura, cioè nella griglia di impostazione. Noterai che ci sono solo due colonne. La prima, nella riga campo, contiene sesso e nella riga tabella indirizzi. Poi è stata creata una nuova riga, che non conoscevamo, e cioè formula. Questo perché si tratta di una query di raggruppamento. Essa contiene infatti raggruppamento. Le altre righe di questa colonna sono uguali a quelle che già conoscevamo. La seconda colonna, nella riga campo, contiene NUM:sesso. Questo perché viene sviluppata così la nostra richiesta "as num" per il conteggio del campo sesso. Infatti la riga formula di questa colonna contiene "conteggio".

Questo è l'aspetto nella griglia di quanto abbiamo scritto in SQL. Proviamo ad aggiungere qualcos'altro alle nostre conoscenze.

Torniamo in SQL e, nell'ultima riga, prima del punto e virgola, dopo aver premuto INVIO per portarlo a capo, aggiungiamo:

having count(sesso) >4

Eseguiamo la query e osserviamo il risultato.

Notiamo che non ci sono più due righe (una con sesso F e l'altra con sesso M), ma soltanto una, con sesso F e num 5. Esaminiamo quale condizione impone la nuova parola chiave HAVING.

Abbiamo chiesto ad Access di mostrarci solo il record di raggruppamento che abbia count(sesso), cioè NUM, maggiore di 4. Se ti ricordi, la riga con sesso M aveva come NUM 3, e quindi è perfettamente comprensibile perché non sia stato inserito: noi infatti abbiamo chiesto di mostrare solo quei record che avessero avuto il numero maggiore di 4. Nella nostra query di raggruppamento ne avevamo solo uno, e cioè quello con sesso=F.

Ricordiamo allora le due parole chiave imparate in questa lezione. GROUP BY consente di ottenere non i record che soddisfano certe condizioni, ma un raggruppamento dei record stessi. In questo caso abbiamo chiesto di ottenere il numero dei record che sono stati raggruppati in ognuno dei record estratti, ma esistono altre funzioni oltre a COUNT, che possono essere utilizzate insieme a GROUP BY.

L'altra parola chiave è HAVING. Questa parola significa, in Inglese, avente, che ha. Essa consente di porre delle limitazioni dopo il raggruppamento, per visualizzare solo i record che hanno le caratteristiche in essa espresse. Chiudiamo ora la nostra query, e salviamo le modifiche, per mantenere l'ultima versione. Infine, chiudiamo anche il nostro database.

Indietro Avanti Ripeti Inizio Aiuto Esci