In questa lezione tratteremo velocemente due sintassi che consentono di effettuare selezioni più complesse in MySQL. Essendo gli argomenti già stati trattati in appositi approfondimenti sul linguaggio SQL, ci limieremo a dei brevi accenni rinviando il lettore ai citati articoli.
GROUP BY e HAVING
La clausola GROUP BY è un elemento facoltativo che può essere inserito all’interno di una SELECT. Il suo scopo è quello di effettuare dei raggruppamenti di dati. Supponiamo, ad esempio, di voler raggruppare i record della nostra tabella "amici" in base al cognome. Per fare ciò utilizzeremo:
SELECT cognome FROM amici GROUP BY cognome;
Come i più attenti di voi avranno già notato, il risultato di questa querry è il medesimo che avremmo potuto ottenre con SELECT DISTINCT:
SELECT DISTINCT cognome FROM amici;
Le potenzialità di GROUP BY, in realtà, emergono quando questa clausola è utilizzata in comunione con HAVING la quale consente di perfezionare i risultati restituiti dalla SELECT mediante un filtro su valori raggruppati. Ad esempio:
SELECT cognome, COUNT(id) AS quanti
FROM amici
GROUP BY cognome
HAVING quanti > 1;
Mediante questa query abbiamo filtrato il resultset mostrando unicamente quei cognomi per i quali è possibile rinvenire più di una occorrenza all’interno della tabella.
L’importanza di GROUP BY, inoltre, emerge quando si utilizzano le cosiddette funzioni di aggregazione (come, appunto, COUNT()). In merito a tali funzioni rimando a questa lezione del corso sul linguaggio SQL cui MySQL si ispira fedelmente.
Per maggiori informazioni su GROUP BY e HAVING si faccia riferimento a questo articolo.
Le UNION
Un altro costrutto di MySQL che merita una certa attenzione è UNION. Attraverso questa istruzione di SQL è possibile unire i risultati di più query all’interno di un unico resultset.
Affinche una UNION funzioni correttamente è necessario che:
- il numero delle colonne selezionate sia uguale in ciascuna delle query che si desidera unire;
- il datataype delle colonne sia corrisponente (o convertibile), non essendo possibile unire i valori estratti da colonne aventi tipi di dato disomogenei (ad esempio INT e VARCHAR).
Vediamo un esempio:
SELECT nome, cognome FROM amici
UNION
SELECT nome, cognome FROM parenti;
Pere maggiori informazioni sul comando UNION vi invito a leggere questo articolo.