Una vista in SQL è una query SQL salvata che funge da tabella virtuale. A differenza delle normali visualizzazioni delle tabelle, le visualizzazioni delle tabelle non memorizzano i dati stessi. Generano invece dinamicamente i dati eseguendo la query SQL definita nella vista ogni volta che si accede.
Può recuperare dati da una o più tabelle e presentarli in un formato personalizzato consentendo agli sviluppatori di:
- Semplifica query complesse: Incapsula join e condizioni complessi in un singolo oggetto.
- Migliora la sicurezza: Limitare l'accesso a colonne o righe specifiche.
- Presentare i dati in modo flessibile: Fornire visualizzazioni dati personalizzate per diversi utenti.
Utilizzeremo queste due tabelle SQL come esempi.
Dettagli studente:
-- Create StudentDetails table
CREATE TABLE StudentDetails (
S_ID INT PRIMARY KEY
NAME VARCHAR(255)
ADDRESS VARCHAR(255)
);
INSERT INTO StudentDetails (S_ID NAME ADDRESS)
VALUES
(1 'Harsh' 'Kolkata')
(2 'Ashish' 'Durgapur')
(3 'Pratik' 'Delhi')
(4 'Dhanraj' 'Bihar')
(5 'Ram' 'Rajasthan');
Produzione:
S_ID | Nome | Indirizzo |
|---|---|---|
1 | Duro | Calcutta |
2 | Ashish | Durgapur |
3 | Pratica | Delhi |
4 | Dhanraj | Bihar |
5 | Ram | Rajasthan |
Voti degli studenti:
-- Create StudentMarks table
CREATE TABLE StudentMarks (
ID INT PRIMARY KEY
NAME VARCHAR(255)
Marks INT
Age INT
);
INSERT INTO StudentMarks (ID NAME Marks Age)
VALUES
(1 'Harsh' 90 19)
(2 'Suresh' 50 20)
(3 'Pratik' 80 19)
(4 'Dhanraj' 95 21)
(5 'Ram' 85 18);
Produzione:
ID | Nome | Segni | Età |
|---|---|---|---|
1 | Duro | 90 | 19 |
2 | Certo | 50 | 20 |
3 | Pratica | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Ram | 85 | 18 |
CREA VISTE in SQL
Possiamo creare una vista usando l'istruzione CREATE VIEW. Una vista può essere creata da una singola tabella o da più tabelle.
Sintassi:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Termini chiave:
- nome_vista : nome della vista
- nome_tabella : Nome della tabella
- condizione : condizione per selezionare le righe
Esempio 1: creazione di una vista semplice da una singola tabella
Esempio 1.1: In questo esempio creeremo una vista denominata DetailsView dalla tabella DettagliStudente.
Domanda:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Utilizza la query seguente per recuperare i dati da questa vista
SELECT * FROM DetailsView;Produzione:
Nome | Indirizzo |
|---|---|
Duro | Calcutta |
Ashish | Durgapur |
Pratica | Delhi |
Dhanraj | Bihar |
Esempio 1.2: Qui creeremo una vista denominata StudentNames dalla tabella StudentDetails.
Domanda:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Se ora interroghiamo la vista as
SELECT * FROM StudentNames;
Produzione:
S_ID | Nome |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Duro |
3 | Pratica |
5 | Ram jsp javatpoint |
Esempio 2: creazione di una vista da più tabelle
In questo esempio creeremo una View MarksView che combina i dati delle tabelle StudentDetails e StudentMarks. Per creare una vista da più tabelle possiamo semplicemente includere più tabelle nel file SELEZIONARE dichiarazione.
Domanda:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Per visualizzare i dati di View MarksView:
SELECT * FROM MarksView;Produzione:
Nome | Indirizzo | Segni mappa iterativa Java |
|---|---|---|
Duro | Calcutta | 90 |
Pratica | Delhi | 80 |
Dhanraj | Bihar | 95 |
Ram | Rajasthan | 85 |
Gestione delle visualizzazioni: aggiornamento ed eliminazione degli elenchi
1. Elencare tutte le visualizzazioni in un database
Possiamo elencare tutte le viste in un database usando l'istruzione SHOW FULL TABLES o interrogando le tabelle information_schema.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Utilizzando information_schema
SELECT table_name
FROM information_schema.views
WHERE table_schema = 'database_name';
OR
SELECT table_schema table_name view_definition
FROM information_schema.views
WHERE table_schema = 'database_name';
2. Eliminazione di una vista
SQL ci consente di eliminare una vista esistente. Possiamo eliminare o rilasciare View utilizzando l'istruzione DROP.
Sintassi:
DROP VIEW view_name;Esempio: In questo esempio stiamo eliminando View MarksView.
DROP VIEW MarksView;3. Aggiornamento di una definizione di vista
Se vogliamo aggiornare i dati esistenti all'interno della vista utilizzare il file AGGIORNAMENTO dichiarazione.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Se desideri aggiornare la definizione della vista senza influire sui dati, utilizza l'istruzione CREATE OR REPLACE VIEW. Ad esempio aggiungiamo ilAgecolonna alMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Nota: Non tutte le viste possono essere aggiornate utilizzando l'istruzione UPDATE.
Regole per aggiornare le viste in SQL:
Per aggiornare una vista è necessario soddisfare alcune condizioni. Se una qualsiasi di queste condizioni è non soddisfatto, la vista non può essere aggiornata.
- L'istruzione SELECT utilizzata per creare la vista non deve includere la clausola GROUP BY o ORDINA PER clausola.
- L'istruzione SELECT non dovrebbe avere l'estensione DISTINTO parola chiave.
- La vista dovrebbe avere tutti valori NOT NULL.
- La vista non deve essere creata utilizzando query nidificate o query complesse.
- La vista deve essere creata da una singola tabella. Se la vista viene creata utilizzando più tabelle, non ci sarà consentito aggiornare la vista.
Tecniche avanzate con visualizzazioni
1. Aggiornamento dei dati tramite visualizzazioni
Possiamo usare l'istruzione CREATE OR REPLACE VIEW per aggiungere o sostituire i campi da una vista. Se vogliamo aggiornare la vista MarksView e aggiungere il campo AGE a questa vista dalla tabella StudentMarks, possiamo farlo in questo modo:
Esempio:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Se recuperiamo tutti i dati da MarksView ora come:
SELECT * FROM MarksView;Produzione:
Nome | Indirizzo | Segni | Età |
|---|---|---|---|
Duro | Calcutta | 90 | 19 |
Pratica | Delhi | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Ram | Rajasthan | 85 | 18 |
Possiamo inserire una riga in una View nello stesso modo in cui lo facciamo in una tabella. Possiamo usare il INSERIRE IN istruzione SQL per inserire una riga in una vista. Nell'esempio seguente inseriremo una nuova riga in View DetailsView che abbiamo creato sopra nell'esempio di "creazione di visualizzazioni da una singola tabella".
Esempio:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Se recuperiamo tutti i dati da DetailsView ora come
SELECT * FROM DetailsView;Produzione:
Nome | Indirizzo |
|---|---|
Duro | Calcutta |
Ashish | Durgapur |
Pratica | Delhi |
Dhanraj | Bihar |
Certo | Gurgaon |
3. Eliminazione di una riga da una vista
Anche eliminare righe da una vista è semplice come eliminare righe da una tabella. Possiamo usare l'istruzione DELETE di SQL per eliminare righe da una vista. Inoltre, l'eliminazione di una riga da una vista elimina prima la riga dalla tabella effettiva e la modifica si riflette quindi nella vista. In questo esempio elimineremo l'ultima riga dalla vista DetailsView che abbiamo appena aggiunto nell'esempio precedente di inserimento delle righe.
Esempio:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Se recuperiamo tutti i dati da DetailsView ora come
SELECT * FROM DetailsView;Produzione:
Nome | Indirizzo |
|---|---|
Duro | Calcutta |
Ashish | Durgapur |
Pratica | Delhi |
Dhanraj | Bihar |
4. Clausola CON OPZIONE CHECK
La clausola WITH CHECK OPTION in SQL è una clausola molto utile per le visualizzazioni. Si applica a una vista aggiornabile. Viene utilizzato per impedire la modifica dei dati (utilizzando INSERT o UPDATE) se la condizione nella clausola WHERE nell'istruzione CREATE VIEW non è soddisfatta.
Se abbiamo utilizzato la clausola WITH CHECK OPTION nell'istruzione CREATE VIEW e se la clausola UPDATE o INSERT non soddisfa le condizioni, restituiranno un errore. Nell'esempio seguente stiamo creando una View SampleView dalla tabella StudentDetails con una clausola WITH CHECK OPTION.
Esempio:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
In questa vista se ora proviamo a inserire una nuova riga con un valore nullo nella colonna NOME, verrà generato un errore perché la vista viene creata con la condizione per la colonna NOME come NOT NULL. Ad esempio, sebbene la vista sia aggiornabile, anche la query seguente per questa vista non è valida:
INSERT INTO SampleView(S_ID)Crea quiz
VALUES(6);