Una vista, (o view), è un oggetto logico che consente di avere una rappresentazione dei dati "personalizzata" dagli utenti.
Per ottenere informazioni capita di costruire query complesse (con join, alias, nidificazioni, etc.) da dare magari ad un altro componente del team di sviluppo, che avrebbe bisogno di qualcosa di molto più semplice e meno lungo.
La vista può essere intesa come "l'alias di una query", ovvero un modo veloce di eseguire una certa query. Se la query definita ogni volta e non viene memorizzata in nessuna struttura fisica o logica, la vista invece è un oggetto creato dall'utente e memorizzato nel dizionario dei dati.
Ciò che resta memorizzato è solo la definizione della query e non i dati che continuano a essere memorizzati nelle rispettive tabelle. Le tabelle interrogate da una vista sono chiamate base tables, cioè tabelle di base.
CREATE VIEW
Lo statement che consente la creazione di una vista è CREATE VIEW
. Per esempio creeremo una vista, denominata "my_view", che visualizza solo i dati contenuti nelle colonne "nominativo", "data_assunz" e "paese_residenza" della tabella impiegati.
Struttura della tabella "impiegati"
Esempio
SQL> CREATE VIEW my_view AS 2 SELECT nominativo, data_assunz, paese_residenza 3 FROM impiegati;
Analizziamo la struttura della vista "my_view" per comprendere che è semplicemente un'estrapolazione della struttura della tabella impiegati.
Struttura della vista "my_view"
Per fare un altro esempio creeremo una vista, denominata "new_employees", che visualizza il contenuto delle colonne "last_name", "first_name", "email" e "phone_number" della tabella "employees"
Struttura della tabella "employees"
SQL> CREATE VIEW new_employees AS 2 SELECT last_name || ' ' || first_name NOME, email, phone_number 3 FROM employees 4 WHERE department_id = (SELECT department_id 5 FROM departments WHERE department_name = 'Finance');
Nota: L'alias di colonna "NOME" visualizza la concatenazione (realizzata con ||
), cioè l'unione, delle colonne "last_name" e "first_name".
La vista visualizza tutti gli impiegati che lavorano nel dipartimento denominato 'Finance'. Per conoscere il codice di identificazione di questo dipartimento abbiamo usato una subquery.
Struttura della vista "new_employees"
Facciamo attenzione alla capacità delle colonne "last_name", "first_name" e "nome". La prima può memorizzare al massimo 25 caratteri, la seconda 20 e la terza, quella su cui è basata la concatenazione delle prime due, 46 caratteri (25 + 20 + 1 carattere di spazio).
Creazione di una vista di sola lettura
Oltre ad usare le viste come query, possiamo sfruttarle per eseguire alcune operazioni DML sulle tabelle base (es. UPDATE
). Per evitare che chi ha accesso alle viste possa modificare i dati nelle tabelle base, possiamo creare viste di sola lettura usando la clausola WITH READ ONLY
in CREATE VIEW
.
Vista che non consente operazioni di DML
SQL> CREATE VIEW readonly_view AS 2 SELECT * FROM padre 3 WITH READ ONLY;