Concetti Chiave
- La clausola GROUP BY consente di raggruppare le righe di una tabella in base ai valori di uno o più attributi, facilitando l'uso di funzioni di aggregazione.
- La clausola HAVING permette di applicare condizioni sui gruppi di righe creati con GROUP BY, rendendo le interrogazioni più specifiche.
- Un esempio di utilizzo di GROUP BY è il calcolo del numero totale di ore di insegnamento per ogni professore, mostrando i risultati in forma aggregata.
- Durante l'esecuzione del programma, si esegue un equi-join tra le tabelle Professori e Insegnano per ottenere i dati aggregati desiderati.
- È importante specificare tutti gli attributi nel comando SELECT che compaiono dopo GROUP BY per evitare errori nel raggruppamento.
La clausola GROUP BY del comando SELECT permette di potenziare ulteriormente le interrogazioni sulle tabelle. Essa infatti consente di raggruppare le righe di una tabella in base ai valori di uno o più attributi,potendo cosi applicare le funzioni di aggregazione viste precedentemente ai singoli gruppi di righe.
Utilizzo della clausola HAVING
Inoltre,attraverso la clausola HAVING,che vine in sequenza solo dopo una GROUP BY,è possibile applicare condizioni di ricerca sui gruppi di righe in modo da rispondere a interrogazioni ancora più specifiche.
Calcolare per ogni professore il numero totale di ore di insegnamento,visualizzando poi l'elenco dei nominativi dei professori con i corrispondenti valori calcolati.
SELECT Professori.CodiceProfessore, Cognome,Nome ,SUM (NumeroOre) AS NumeroTotaleOreInsegnamento
FROM Professori, Insegnano
WHERE Professori.CodiceProfessore = Insegnano.CodiceProfessore
GROUP BY Professori.CodiceProfessore, Cognome,Nome.
Simulazione dell'esecuzione del programma
Simuliamo passo a passo l'esecuzione del programma
1)E' eseguito l'equin-join tra le tabelle Professori e Insegnano.
2)Le righe della tabella risultante vengono raggruppate in base ai valori degli attributi CodiceProfessore,Cognome e Nome,in modo da ottenere per ogni singolo professore le relative righe corrispondenti ai suoi dati;
3)Su ciascun gruppo di righe,e quindi per ogni singolo professore,è applicata la funzione di aggregazione SUM,in modo da ottenere per ogni professore il numero di ore di insegnamento,visualizzando l'elenco dei professori e i corrispondenti valori calcolati nella colonna individuata da NumeroTotaleOreInsegnamento.
Importanza della specifica degli attributi
Osserviamo che in questo caso è buona regola specificare dopo il comando SELECT tutti gli attributi che compaiono dopo la clausola GROUP BY,in modo da evitare di incorrere in errori sul raggruppamento. L'esempio può anche esser cosi sviluppato.
SELECT Cognome,Nome ,SUM (NumeroOre) AS NumeroTotaleOreInsegnamento
FROM Professori, Insegnano
WHERE Professori.CodiceProfessore = Insegnano.CodiceProfessore
GROUP BY Professori.CodiceProfessore, Cognome,Nome.
Domande da interrogazione
- Qual è la funzione della clausola GROUP BY nelle interrogazioni SQL?
- Come si utilizza la clausola HAVING in un'interrogazione SQL?
- Perché è importante specificare gli attributi dopo il comando SELECT in presenza di GROUP BY?
La clausola GROUP BY permette di raggruppare le righe di una tabella in base ai valori di uno o più attributi, consentendo l'applicazione di funzioni di aggregazione ai singoli gruppi di righe.
La clausola HAVING viene utilizzata dopo GROUP BY per applicare condizioni di ricerca sui gruppi di righe, permettendo di ottenere risultati più specifici.
È buona regola specificare tutti gli attributi che compaiono dopo GROUP BY per evitare errori sul raggruppamento, garantendo così la correttezza dei risultati ottenuti.