Le viste (view) in SQL
Per creare una vista nel linguaggio SQL utilizzo il comando CREATE VIEW
CREATE VIEW nomevista [(lista attributi)]
AS selectSQL
Il primo parametro è il nome della vista, seguito eventualmente dalla lista degli attributi.
Il secondo parametro è l'interrogazione che fornisce i dati alla vista.
Cosa sono le viste? Nel linguaggio SQL le viste sono tabelle virtuali, il cui contenuto dipende da una o più tabelle del database. Sono un'alternativa alle interrogazioni ricorrenti.
Il numero degli attributi della vista deve coincidere con il numero di attributi estratti dall'interrogazione.
I nomi degli attributi possono anche essere diversi.
Un esempio pratico
Ho la tabella Meteo con le temperature delle principali città italiane.
Ogni giorno ho l'esigenza di vedere le temperature a Roma.
Potrei fare una SELECT ogni giorno.
SELECT temperatura FROM meteo WHERE città="Roma"
Sarebbe però un'operazione ripetitiva e lunga.
In alternativa, posso creare una vista con CREATE VIEW che visualizza soltanto le righe della tabella Meteo in cui l'attributo città è Roma.
CREATE VIEW meteoRoma (città. temperatura)
AS ( SELECT città, temperatura FROM `meteo` WHERE Città='Roma' )
Il risultato della vista è la seguente tabella dinamica
In questo modo evito di dover scrivere la select ogni giorno.
Mi basta aprire la vista e ottengo lo stesso risultato.
Nota. La tabella dinamica non esiste. Richiama le informazioni presenti nella tabella Meteo. Pertanto, ogni volta che apro la vista sono visualizzate le informazioni aggiornate.
E' un semplice esempio per rendere l'idea.
L'utilità delle viste si apprezza soprattutto quando la query è complessa e coinvolge molte tabelle.
A cosa servono le viste
Le viste sono uno strumento di sintesi per visualizzare in un unico schema degli attributi presi da più tabelle.
Sono utili perché evitano di dover scrivere delle query ricorrenti in linguaggio SQL.
I dati restano contenuti nelle rispettive tabelle. Non sono copie.
Pertanto, le informazioni visualizzate nelle viste sono sempre aggiornate.
Cosa accade se modifico i dati nella vista
Una modifica ai dati nella vista si propaga anche nella tabella di base, quella da cui dipende la vista.
Nella clausola WITH l'opzione di default è CASCADED.
CREATE VIEW nomevista
AS selectSQL
WITH [ Local | Cascaded ] CHECK OPTION
Tuttavia, non sempre è possibile modificare i dati sulla vista.
In genere l'aggiornamento sulla tabella di base è possibile solo se una riga della vista corrisponde a una riga della vista.
Nota. Ogni DBMS fissa delle regole apposite. Pertanto, l'aggiornamento vista -> tabella di base dipende anche dall'ambiente SQL in cui si lavora.
Le interrogazioni SELECT sulle viste
Sulle viste posso fare anche delle interrogazioni tramite il comando SELECT come se fossero delle tabelle.
Questo permette di aumentare il potere espressivo del linguaggio SQL.
Esempio
Ho la tabella Meteo
Creo una vista per visualizzare le città con più d 30° gradi.
La chiamo Meteo30
CREATE VIEW Meteo30
AS ( SELECT * FROM Meteo WHERE temperatura>30 )
Il risultato è la seguente tabella dinamica
Voglio trovare la temperatura minore tra tutte quelle con più di 30°.
Per farlo scrivo un'interrogazione sulla vista Meteo30.
SELECT città, MIN(temperatura) FROM Meteo30
Il risultato finale è
In alcuni casi l'uso delle viste semplifica la costruzione delle interrogazioni nidificate.
Per ottenere lo stesso risultato con una select nidificata avrei dovuto scrivere
SELECT T1.Città, min(T1.mintemp) FROM ( SELECT città, min(temperatura) AS mintemp FROM meteo GROUP BY Temperatura HAVING mintemp>30 ) AS T1
E così via.