Approfondimenti su SQL: clausole where, having, group by.
La prima versione di SQL metteva a disposizione solo la forma strutturata, con una sola relazione in ogni clausola FROM, rendendolo molto limitato.
Se i campi selezionati provengono da più Tables, occorre utilizzare delle sintassi specifiche per determinare un campo in modo univoco, da qui approfondiamo alcune note.
- clausola WHERE
Indica il criterio di scelta: l’elemento base è nomefield, operatore di confronto valore|nomefield e possono essere concatenati più elementi base tramite gli operatori logici (And Or).
Esempio: WHERE NomeImpiegato=”Paolo” And (ImportoOrdini>10000000 Or NumeroOrdini>100)
Nell’eseguire questa operazione il motore database cerca la Table specificata, estrae le colonne (=campi) scelte, individua le righe (=record) che soddisfano il criterio e raggruppa le righe risultanti nell’ordine specificato.
Il comando SELECT non modifica i dati del database.
La sintassi è :
SELECT fields FROM table
Usando un aterisco (*) si scelgono tutti i campi di una Table ad esempio:
SELECT * FROM
- GROUP BY(groupfieldlist):
l’ordine dei campi in groupfieldlist determina il livello di grouping da quello più alto a quello più basso(fino a 10 campi usati per raggruppare i records).
I valori riepilogativi vengono omessi se non è indicata una funzione SQL di aggregazione nel comando SELECT, al contrario i Valori Null nei campi di GROUP BY vengono ordinati e non saltati.
Quindi è necessario usare la la clausola WHERE per escludere i records che non si vuole raggruppare, invece usare la calusola HAVING per filtrare i records dopo che sono stati raggruppati.
La clausola HAVING permette di specificare quali records raggruppati vengono restituiti da un comando SELECT con clausola GROUP BY.
Per capire meglio il quadro generale partiamo dalla sintassi:
|
SELECT ……… |
|
FROM ……….. |
|
WHERE ………. |
|
GROUP BY groupfieldlist |
|
HAVING groupcriteria. |
Groupcriteria è un’espressione che determina quali records raggruppati restituire; possono essere usate fino a 40 espressioni collegate dagli operatori And e Or.
Tutte queste definizioni sono molto utili perché in un ambiete multiutente di lavoro(esempio le aziende), ci permette di classificare con ordine le diverse voci.
SELECT Cognome, Nome, Salario
in SQL l’operatore group by ci consente di raggruppare i dati
Un’ interrogazione corretta:
select dipart, count (*), d.città
from impiegato i join dipartimento d on i.dipart=d.nome
group by dipart, città FROM Stipendi ORDER BY Cognome.