Una vista è una tabella virtuale il cui contenuto è definito da una query. In modo analogo a una tabella, una vista è costituita da un set di colonne e righe di dati denominate.
è possibile considerare una vista come una tabella virtuale o una query archiviata. Se una vista non è indicizzata, i relativi dati non vengono archiviati nel database sotto forma di oggetto distinto. Nel database viene archiviata solo un'istruzione SELECT. Il set di risultati dell'istruzione SELECT costituisce la tabella virtuale restituita dalla vista. è possibile utilizzare questa tabella virtuale facendo riferimento al nome della vista nelle istruzioni Transact-SQL, con la stessa modalità utilizzata per fare riferimento a una tabella.
Tipologie di viste
In SQL Server 2005 è possibile creare viste standard, viste indicizzate e viste partizionate.
Una vista standard consente di combinare i dati di una o più tabelle e di sfruttare la maggior parte dei vantaggi derivanti dall'utilizzo delle viste, tra cui la possibilità di concentrare l'attenzione su dati specifici e di semplificare le operazioni di modifica dei dati.
Una vista indicizzata è una vista che è stata materializzata, ovvero calcolata e archiviata. Per indicizzare una vista, è necessario creare su di essa un indice cluster univoco. Le viste indicizzate consentono di migliorare notevolmente le prestazioni di alcuni tipi di query e risultano ideali per le query che prevedono l'aggregazione di molte righe. Non sono invece adatte per i set di dati sottostanti che vengono aggiornati di frequente.
Una vista partizionata unisce dati partizionati in senso orizzontale da un set di tabelle membro appartenenti a uno o più server. In tal modo i dati risulteranno appartenenti a un'unica tabella. Una vista che unisce tabelle membro nella stessa istanza di SQL Server costituisce una vista partizionata locale.
Creazione di una vista standard
Per creare una vista in SQL 2005, dobbiamo poter disporre di privilegi idonei e dobbiamo attenerci ad alcune semplici regole.
- Le viste possono essere create solamente nel Database in uso
- Si possono creare viste di viste
- Le viste non possono avere clausole ORDER
- Non si possono creare viste su tabelle temporanee
Creazione tramite Management Studio
Come per la creazione di una tabella, anche per creare una vista basta selezionare la cartella viste all'interno di Management Studio, premere il tasto destro del mouse e selezionare crea vista.
Durante la creazione di una vista in management Studio, possiamo selezionare una o più tabelle o viste, che prenderanno parte alla creazione.
Management Studio propone già la sintassi SQL della query che verrà eseguita ogni volta che si richiamerà la vista. Questa non è la sintassi T-SQL per la creazione della vista, ma la sua SELECT.
Una volta ottenuto il risultato desiderato, premendo CTRL+S andremo a salvare la vista. A questo punto potremo effettuare le query come se fosse una semplice tabella.
Creazione tramite T-SQL
Listato 1. Creazione vista ANA_ORDINI
CREATE VIEW [dbo].[ANA_ORDINI]
AS
SELECT
dbo.ANAGRAFICA.ANA_NOME,
dbo.ANAGRAFICA.ANA_COGNOME,
dbo.ORDINI.ORD_PRODOTTO,
dbo.ORDINI.ORD_QUANTITA,
dbo.ORDINI.ORD_PREZZO
FROM
dbo.ANAGRAFICA INNER JOIN
dbo.ORDINI ON dbo.ANAGRAFICA.ANA_ID = dbo.ORDINI.ORD_ID_ANA
Il comando per la creazione di una vista, richiede la presenza di una istruzione SELECT nella quale bisogna specificare i campi che volgiamo visualizzare. In questo caso abbiamo usato un legame di tipo INNER JOIN per legare l'ID del cliente a quello dell'ordine.
Modificare una vista
La modifica di una vista tramite Management Studio risulta molto semplice. Per prima cosa dobbiamo selezionare la vista e poi procedere con il comando da menu modifica vista. La schermata che avremo a disposizione sarà la stessa di quella di creazione.
Modifica di una vista tramite T-SQL
Tramite il linguaggio T-SQL, dobbiamo usare l'istruzione ALTER VIEW. Dopo il comando ALTER dovremo inserire le opzioni o i campi da modificare. Possiamo, ad esempio, modificare completamente l'istruzione di SELECT oppure cambiare semplicemente la clausola WHERE.
Listato 2. Modifica vista ANA_ORDINI
ALTER VIEW [dbo].[ANA_ORDINI]
AS
SELECT
dbo.ANAGRAFICA.ANA_NOME,
dbo.ANAGRAFICA.ANA_COGNOME,
dbo.ORDINI.ORD_PRODOTTO,
dbo.ORDINI.ORD_QUANTITA,
dbo.ORDINI.ORD_PREZZO
FROM dbo.ANAGRAFICA INNER JOIN dbo.ORDINI
ON dbo.ANAGRAFICA.ANA_ID = dbo.ORDINI.ORD_ID_ANA
WHERE dbo.ORDINI.ORD_PREZZO > 100.00
GO