Parlando dei datalog sono state introdotte le viste, ovvero delle tabelle virtuali il cui contenuto dipende dal contenuto delle altre tabelle di una base di dati.

Le viste vengono definite in SQL associando un nome ed una lista di attributi al risultato dell'esecuzione dell'interrogazione.

Untitled

L'interrogazione SQL deve restituire un insieme di attributi compatibile con gli attributi nello schema della vista; l'ordine nella calusola select deve corrispondere all'ordine degli attributi nello schema.

Definiamo una vista IMPIEGATIAMMIN che contiene tutti gli impiegati del dipartimento Amministrazione con uno stipendio superiore a 10k euro.

Untitled

Costruiamo quindi una vista IMPIEGATIAMMINPOVERI definita a partire dalla vista IMPIEGATIAMMIN, che conterrà gli impiegati amministrativi con uno stipendio compreso tra i 10 e i 50 mila euro:

Untitled

Su certe viste è permesso effettuare operazioni di modifica, che verranno tradotte negli opportuni comandi di modifica al livello delle tabelle di base da cui la vista dipende. Non è sempre possibile determinare un modo univoco in cui la modifica sulla vista possa essere riportata sulle tabelle di base.

I sistemi commerciali tipicamente considerano una vista aggiornabile solo se è definita su una sola tabella: qualche sistema chiede pure che l'insieme di attributi della vista contenga almeno una chiave primaria della tabella.

La clausola check option può essere usata solo nel contesto di queste viste. Essa specifica che possono essere ammessi aggiornamenti solo sulle righe della vista, e dopo gli aggiornamenti le righe devono continuare ad appartenere alla vista.

Se l’opzione è local, il controllo viene fatto solo rispetto alla vista su cui viene invocato il comando.

Se l’opzione è cascaded, il controllo viene fatto su tutte le viste coinvolte.

Viste per la scrittura di interrogazioni

Le viste in SQL possono anche servire per formulare delle interrogazioni che non sarebbero altrimenti esprimibili, aumentando il potere espressivo del linguaggio.

Per esempio intervengono quando si vorrebbe usare diversi operatori aggregati in cascata, non permesso da SQL.

Si vuole determinare qual è il dipartimento che spende il massimo in stipendi. Per questo fine, si definisca una vista che verrà utilizzata dalla successiva interrogazione:

Untitled

Untitled

Modifiche tramite viste semplici