5° Anno TEORIA 4. Introduzione al linguaggio SQL | Page 47

16 . Il linguaggio SQL Vers . 9.3 – Marzo 2024
I RAGGRUPPAMENTI
Capita con una notevole frequenza di dover effettuare calcoli o statistiche su dati memorizzati , che abbiano qualche caratteristica in comune . SQL mette a disposizione , a questo scopo , un potente strumento : i raggruppamenti . “ Raggruppare ” significa " mettere insieme " tutti i dati , accomunati da qualche caratteristica , su cui vanno fatti alcuni tipi di conteggi .
Le funzioni di aggregazione che , come abbiamo visto in precedenza , permettono di ottenere informazioni riepilogative di sintesi delle ennuple di una tabella , sono in genere abbinate alle clausole di raggruppamento all ’ interno dell ’ istruzione SELECT .
Per esempio si determina con una query di raggruppamento l ' individuazione dello stipendio minimo o massimo dei dipendenti di un determinato reparto ( codice ); oppure la somma degli stipendi dei dipendenti con un determinato livello e via dicendo
Per poter eseguire un raggruppamento all ’ interno di una SELECT , occorre rispettare la seguente SINTASSI :
GROUP BY < NomeAttributo1 >, …, < NomeAttributoN > [ HAVING < CondizioneGruppo >]
Con l ’ aggiunta della clausola di raggruppamento il significato della SELECT è il seguente : - viene eseguito , se necessario , il prodotto delle tabelle presenti nella clausola FROM ; - su tale prodotto , se previsto , si effettua una restrizione in base alla clausola WHERE ;
- la tabella risultante viene logicamente partizionata in gruppi di righe in base alla clausola GROUP BY . ( due righe appartengono allo stesso gruppo se hanno gli stessi valori per gli attributi elencati nella clausola GROUP BY );
- tutti i gruppi che non soddisfano l ’ eventuale clausola HAVING vengono ora eliminati .
N . B . Ricordiamo che con la parola chiave DISTINCT , già presentata in precedenza , dopo il comando parola SELECT , abbiamo visto in pratica la forma più semplice di aggregazione : quella che distingue le righe uguali riportandole quindi una sola volta .
SELECT DISTINCT Livello FROM Dipendente ;
SELECT Livello FROM Dipendente GROUP BY Livello ;
Da quanto detto , possiamo desumere che se viene specificata una clausola GROUP BY , allora nella clausola SELECT dovrà essere presente :
• o un campo specificato nella clausola GROUP BY ;
• oppure una funzione di aggregazione .
+ --------- + | Livello | + --------- + | 7 | | 8 | | 9 | + --------- +
Questo perché quando il motore aggrega le righe deve sapere come comportarsi per ogni campo da restituire .
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 47