O vizualizare în SQL este o interogare SQL salvată care acționează ca un tabel virtual. Spre deosebire de vederile obișnuite ale tabelelor nu stochează datele în sine. În schimb, generează dinamic date prin executarea interogării SQL definite în vizualizare de fiecare dată când sunt accesate.
Poate prelua date dintr-unul sau mai multe tabele și le poate prezenta într-un format personalizat, permițând dezvoltatorilor să:
- Simplificați interogări complexe: Încapsulați îmbinări și condiții complexe într-un singur obiect.
- Îmbunătățiți securitatea: Restricționați accesul la anumite coloane sau rânduri.
- Prezentați datele în mod flexibil: Oferiți vizualizări de date personalizate pentru diferiți utilizatori.
Vom folosi aceste două tabele SQL pentru exemple.
Detalii student:
-- 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');
Ieșire:
S_ID | Nume | Adresa |
|---|---|---|
1 | Aspru | Kolkata |
2 | Ashish | Durgapur |
3 | Practica | Delhi |
4 | Dhanraj | Bihar |
5 | RAM | Rajasthan |
Marks student:
-- 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);
Ieșire:
ID | Nume | Marci | Vârstă |
|---|---|---|---|
1 | Aspru | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Practica | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | RAM | 85 | 18 |
CREATE VIEWS în SQL
Putem crea o vizualizare folosind instrucțiunea CREATE VIEW. O vizualizare poate fi creată dintr-un singur tabel sau mai multe tabele.
Sintaxă:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Termeni cheie:
- view_name : Nume pentru vizualizare
- nume_tabel : Numele tabelului
- stare : Condiție pentru selectarea rândurilor
Exemplul 1: Crearea unei vederi simple dintr-un singur tabel
Exemplul 1.1: În acest exemplu, vom crea o vizualizare numită DetailsView din tabelul StudentDetails.
Interogare:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Utilizați interogarea de mai jos pentru a prelua datele din această vizualizare
SELECT * FROM DetailsView;Ieșire:
Nume | Adresa |
|---|---|
Aspru | Kolkata |
Ashish | Durgapur |
Practica | Delhi |
Dhanraj | Bihar |
Exemplul 1.2: Aici vom crea o vizualizare numită StudentNames din tabelul StudentDetails.
Interogare:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Dacă interogăm acum vizualizarea ca
SELECT * FROM StudentNames;
Ieșire:
S_ID | Nume |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Aspru |
3 | Practica |
5 | RAM comanda în nodul js |
Exemplul 2: Crearea unei vizualizări din mai multe tabele
În acest exemplu, vom crea o vizualizare MarksView care combină datele din ambele tabele StudentDetails și StudentMarks. Pentru a crea o vizualizare din mai multe tabele, putem include pur și simplu mai multe tabele în SELECTA declaraţie.
Interogare:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Pentru a afișa datele din View MarksView:
SELECT * FROM MarksView;Ieșire:
pereche java
Nume | Adresa | Marci |
|---|---|---|
Aspru | Kolkata | 90 |
Practica | Delhi | 80 |
Dhanraj | Bihar | 95 |
RAM | Rajasthan | 85 |
Gestionarea vizualizărilor: actualizare și ștergere a listelor
1. Listarea tuturor vizualizărilor dintr-o bază de date
Putem enumera toate vizualizările dintr-o bază de date folosind instrucțiunea SHOW FULL TABLES sau interogând tabelele information_schema.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Folosind 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. Ștergerea unei vizualizări
SQL ne permite să ștergem o vizualizare existentă. Putem şterge sau drop View folosind instrucțiunea DROP.
Sintaxă:
DROP VIEW view_name;Exemplu: În acest exemplu, ștergem View MarksView.
DROP VIEW MarksView;3. Actualizarea unei definiții de vizualizare
Dacă dorim să actualizăm datele existente în vizualizare, utilizați UPDATE declaraţie.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Dacă doriți să actualizați definiția vizualizării fără a afecta datele, utilizați instrucțiunea CREATE OR REPLACE VIEW. De exemplu, să adăugămAgecoloana laMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Nota: Nu toate vizualizările pot fi actualizate folosind instrucțiunea UPDATE.
Reguli pentru actualizarea vizualizărilor în SQL:
Anumite condiții trebuie îndeplinite pentru a actualiza o vizualizare. Dacă oricare dintre aceste condiții este nu întâlnit vizualizarea nu poate fi actualizată.
- Instrucțiunea SELECT care este utilizată pentru a crea vizualizarea nu trebuie să includă clauza GROUP BY sau COMANDA PENTRU clauză.
- Instrucțiunea SELECT nu trebuie să aibă DISTINCT cuvânt cheie.
- Vizualizarea ar trebui să aibă toate valorile NOT NULL.
- Vederea nu trebuie creată folosind interogări imbricate sau interogări complexe.
- Vederea trebuie creată dintr-un singur tabel. Dacă vizualizarea este creată folosind mai multe tabele, atunci nu ni se va permite să actualizăm vizualizarea.
Tehnici avansate cu vizualizări
1. Actualizarea datelor prin vizualizări
Putem folosi instrucțiunea CREATE OR REPLACE VIEW pentru a adăuga sau înlocui câmpuri dintr-o vizualizare Dacă dorim să actualizăm vizualizarea MarksView și să adăugăm câmpul AGE la această vizualizare din StudentMarks Table, putem face acest lucru prin:
Exemplu:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Dacă preluăm toate datele de la MarksView acum ca:
SELECT * FROM MarksView;Ieșire:
Nume | Adresa | Marci | Vârstă |
|---|---|---|---|
Aspru | Kolkata | 90 | 19 |
Practica | Delhi | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
RAM | Rajasthan | 85 | 18 |
Putem insera un rând într-o vizualizare în același mod ca și într-un tabel. Putem folosi INSERT INTO instrucțiunea SQL pentru a insera un rând într-o vizualizare. În exemplul de mai jos vom insera un nou rând în View DetailsView pe care l-am creat mai sus în exemplul „crearea vizualizărilor dintr-un singur tabel”.
Exemplu:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Dacă preluăm toate datele din DetailsView acum ca
SELECT * FROM DetailsView;Ieșire:
Nume | Adresa |
|---|---|
Aspru | Kolkata |
Ashish | Durgapur |
Practica | Delhi |
Dhanraj | Bihar |
Suresh | Gurgaon |
3. Ștergerea unui rând dintr-o vizualizare
Ștergerea rândurilor dintr-o vizualizare este, de asemenea, la fel de simplă ca și ștergerea rândurilor dintr-un tabel. Putem folosi instrucțiunea DELETE a SQL pentru a șterge rânduri dintr-o vizualizare. De asemenea, ștergerea unui rând dintr-o vizualizare șterge mai întâi rândul din tabelul real, iar modificarea este apoi reflectată în vizualizare. În acest exemplu, vom șterge ultimul rând din vizualizarea DetailsView pe care tocmai l-am adăugat în exemplul de mai sus de inserare a rândurilor.
Exemplu:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Dacă preluăm toate datele din DetailsView acum ca
SELECT * FROM DetailsView;Ieșire:
Nume | Adresa |
|---|---|
Aspru | Kolkata |
Ashish | Durgapur |
Practica | Delhi |
Dhanraj | Bihar |
4. CU OPȚIUNE DE CHECK Clauza
Clauza WITH CHECK OPTION din SQL este o clauză foarte utilă pentru vizualizări. Se aplică unei vizualizări actualizabile. Este folosit pentru a preveni modificarea datelor (folosind INSERT sau UPDATE) dacă condiția din clauza WHERE din instrucțiunea CREATE VIEW nu este îndeplinită.
Dacă am folosit clauza WITH CHECK OPTION în instrucțiunea CREATE VIEW și dacă clauza UPDATE sau INSERT nu îndeplinește condițiile atunci vor returna o eroare. În exemplul de mai jos, creăm un View SampleView din tabelul StudentDetails cu o clauză WITH CHECK OPTION.
Exemplu:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
În această vizualizare, dacă acum încercăm să inserăm un nou rând cu o valoare nulă în coloana NAME, atunci va da o eroare deoarece vizualizarea este creată cu condiția pentru coloana NAME ca NOT NULL. De exemplu, deși vizualizarea poate fi actualizată, interogarea de mai jos pentru această vizualizare nu este validă:
INSERT INTO SampleView(S_ID)Creați un test
VALUES(6);