Una vista è una tabella virtuale ottenuta a partire da una query SQL.
Trutturalmente è simile ad una tabella in quanto contiene righe e colonne.
In una vista è possibile utilizzare quasi tutti gli operatori SQL come le join, le where, o le funzioni.
Prediamo in esame due tabelle che utilizzeremo per gli esempi:
Tabella Società
Societa | Codice |
---|---|
Microsoft | 1 |
Oracle | 2 |
Sun | 3 |
HP | 4 |
MorpheusWeb | 5 |
Tabella Ordini
NumeroOrdine | Importo | CodiceSocieta |
---|---|---|
1001 | 100 | 1 |
1002 | 200 | 2 |
1003 | 50 | 3 |
1004 | 300 | 4 |
1005 | 80 | 1 |
1006 | 120 | 2 |
Consente di creare una vista sulla base di una serie di istruzioni SQL
CREATE VIEW Nome_vista AS
Istruzioni_di_Select
CREATE VIEW OrdiniSocieta
SELECT
Societa, NumeroOrdine
FROM Societa
INNER JOIN Ordini
ON Societa.Codice = Ordini.CodiceSocieta
La query seguente
SELECT * FROM OrdiniSocieta
Restituirà il seguente risultato
Societa | NumeroOrdine |
---|---|
Microsoft | 1001 |
Oracle | 1002 |
Sun | 1003 |
HP | 1004 |
Microsoft | 1005 |
Oracle | 1006 |
Consente di modificare una vista preesistente
ALTER VIEW Nome_vista AS
Istruzioni_di_Select
ALTER VIEW OrdiniSocieta
SELECT
Codice, Societa, NumeroOrdine
FROM Societa
INNER JOIN Ordini
ON Societa.Codice = Ordini.CodiceSocieta
La query seguente
SELECT * FROM OrdiniSocieta
Restituirà il seguente risultato
Codice | Societa | NumeroOrdine |
---|---|---|
1 | Microsoft | 1001 |
2 | Oracle | 1002 |
3 | Sun | 1003 |
4 | HP | 1004 |
1 | Microsoft | 1005 |
2 | Oracle | 1006 |
Elimina una vista esistente dal database (non elimina ne le tabelle, ne i dati contenuti in esse)
DROP VIEW Nome_vista
DROP VIEW OrdiniSocieta
In SQL Server è possibile creare delle viste indicizzate tramite l'opzione WITH SCHEMABINDING
L'operazione è consigliabile quando le viste contengono un numero elevato di join ed estraggono molti dati che poi dovranno essere filtrati
CREATE VIEW OrdiniSocieta WITH SCHEMABINDING
SELECT
Codice, Societa, NumeroOrdine
FROM Societa
INNER JOIN Ordini
ON Societa.Codice = Ordini.CodiceSocieta
GO
CREATE INDEX ix_OrdiniSocieta ON OrdiniSocieta (Codice) INCLUDE (NumeroOrdine)