SQL: utilizzo delle viste

Una vista non è altro che un'istruzione SQL archiviata nel database con un nome associato. Una vista è in realtà una composizione di una tabella sotto forma di una query SQL predefinita.

Una vista può contenere tutte le righe di una tabella o selezionare righe da una tabella. Una vista può essere creata da una o più tabelle che dipende dalla query SQL scritta per creare una vista.

Le viste, che sono un tipo di tabelle virtuali, consentono agli utenti di eseguire le seguenti operazioni:

  • Struttura i dati in modo che gli utenti o le classi di utenti trovino naturali o intuitivi.

  • Limitare l'accesso ai dati in modo tale che un utente possa vedere e (a volte) modificare esattamente ciò di cui ha bisogno e non di più.

  • Riepiloga i dati da varie tabelle che possono essere utilizzate per generare report.

Creazione di viste

Le visualizzazioni del database vengono create utilizzando il CREATE VIEWdichiarazione. Le viste possono essere create da una singola tabella, più tabelle o un'altra vista.

Per creare una vista, un utente deve disporre dei privilegi di sistema appropriati in base all'implementazione specifica.

La base CREATE VIEW la sintassi è la seguente:

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

È possibile includere più tabelle nell'istruzione SELECT in modo simile a come vengono utilizzate in una normale query SQL SELECT.

Esempio

Considera la tabella CLIENTI con i seguenti record:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Di seguito è riportato un esempio per creare una vista dalla tabella CUSTOMERS. Questa visualizzazione verrà utilizzata per ottenere il nome e l'età del cliente dalla tabella CUSTOMERS.

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

Ora puoi interrogare CUSTOMERS_VIEW in modo simile a come interroghi una tabella effettiva. Di seguito è riportato un esempio per lo stesso.

SQL > SELECT * FROM CUSTOMERS_VIEW;

Ciò produrrebbe il seguente risultato.

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Muffy    |  24 |
+----------+-----+

L'OPZIONE CON CONTROLLO

WITH CHECK OPTION è un'opzione dell'istruzione CREATE VIEW. Lo scopo dell'OPZIONE WITH CHECK è garantire che tutti gli UPDATE e gli INSERT soddisfino le condizioni nella definizione della vista.

Se non soddisfano le condizioni, UPDATE o INSERT restituisce un errore.

Il seguente blocco di codice ha un esempio di creazione della stessa vista CUSTOMERS_VIEW con WITH CHECK OPTION.

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

L'OPZIONE WITH CHECK in questo caso dovrebbe negare l'immissione di qualsiasi valore NULL nella colonna AGE della vista, perché la vista è definita da dati che non hanno un valore NULL nella colonna AGE.

Aggiornamento di una vista

Una vista può essere aggiornata in determinate condizioni indicate di seguito:

  • La clausola SELECT non può contenere la parola chiave DISTINCT.

  • La clausola SELECT non può contenere funzioni di riepilogo.

  • La clausola SELECT non può contenere funzioni set.

  • La clausola SELECT non può contenere operatori di gruppo.

  • La clausola SELECT non può contenere una clausola ORDER BY.

  • La clausola FROM non può contenere più tabelle.

  • La clausola WHERE non può contenere sottoquery.

  • La query non può contenere GROUP BY o HAVING.

  • Le colonne calcolate potrebbero non essere aggiornate.

  • Tutte le colonne NOT NULL della tabella di base devono essere incluse nella vista affinché la query INSERT funzioni.

Quindi, se una vista soddisfa tutte le regole sopra menzionate, puoi aggiornare quella vista. Il seguente blocco di codice contiene un esempio per aggiornare l'età di Ramesh.

SQL > UPDATE CUSTOMERS_VIEW
   SET AGE = 35
   WHERE name = 'Ramesh';

Ciò alla fine aggiornerà la tabella di base CLIENTI e lo stesso si rifletterebbe nella vista stessa. Ora, prova a interrogare la tabella di base e l'istruzione SELECT produrrà il seguente risultato.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Inserimento di righe in una vista

È possibile inserire righe di dati in una vista. Le stesse regole che si applicano al comando UPDATE si applicano anche al comando INSERT.

Qui, non possiamo inserire righe in CUSTOMERS_VIEW perché non abbiamo incluso tutte le colonne NOT NULL in questa vista, altrimenti puoi inserire righe in una vista in modo simile a come le inserisci in una tabella.

Eliminazione di righe in una vista

È possibile eliminare righe di dati da una vista. Le stesse regole che si applicano ai comandi UPDATE e INSERT si applicano al comando DELETE.

Di seguito è riportato un esempio per eliminare un record con AGE = 22.

SQL > DELETE FROM CUSTOMERS_VIEW
   WHERE age = 22;

Ciò alla fine eliminerebbe una riga dalla tabella di base CUSTOMERS e lo stesso si rifletterebbe nella visualizzazione stessa. Ora, prova a interrogare la tabella di base e l'istruzione SELECT produrrà il seguente risultato.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Eliminazione delle visualizzazioni

Ovviamente, dove hai una vista, hai bisogno di un modo per rilasciare la vista se non è più necessaria. La sintassi è molto semplice e viene fornita di seguito:

DROP VIEW view_name;

Di seguito è riportato un esempio per eliminare CUSTOMERS_VIEW dalla tabella CUSTOMERS.

DROP VIEW CUSTOMERS_VIEW;