Una vista en SQL és una consulta SQL desada que actua com una taula virtual. A diferència de les taules normals, les vistes no emmagatzemen les dades per si mateixes. En lloc d'això, generen dades de forma dinàmica executant la consulta SQL definida a la vista cada vegada que s'hi accedeix.
Pot obtenir dades d'una o més taules i presentar-les en un format personalitzat que permet als desenvolupadors:
- Simplifica les consultes complexes: Encapsular unions i condicions complexes en un sol objecte.
- Millora de la seguretat: Restringeix l'accés a columnes o files específiques.
- Presentar les dades de manera flexible: Proporcioneu visualitzacions de dades personalitzades per a diferents usuaris.
Utilitzarem aquestes dues taules SQL com a exemples.
Detalls de l'estudiant:
-- 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');
Sortida:
S_ID | Nom | Adreça |
|---|---|---|
1 | Aspre | Calcuta |
2 | Ashish | Durgapur |
3 | Pràctica | Delhi |
4 | Dhanraj | Bihar |
5 | Ram | Rajasthan |
Marques de l'estudiant:
-- 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);
Sortida:
ID | Nom | Marques | Edat |
|---|---|---|---|
1 | Aspre | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Pràctica | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Ram | 85 | 18 |
CREAR VISUALITZACIONS en SQL
Podem crear una vista mitjançant la instrucció CREATE VIEW. Es pot crear una vista a partir d'una sola taula o de diverses taules.
Sintaxi:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Termes clau:
- view_name : Nom de la vista
- nom_taula : Nom de la taula
- condició : Condició per seleccionar files
Exemple 1: creació d'una vista simple a partir d'una taula única
Exemple 1.1: En aquest exemple crearem una vista anomenada DetailsView de la taula StudentDetails.
Consulta:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Utilitzeu la consulta següent per recuperar les dades d'aquesta vista
SELECT * FROM DetailsView;Sortida:
Nom | Adreça |
|---|---|
Aspre | Calcuta |
Ashish | Durgapur |
Pràctica | Delhi |
Dhanraj | Bihar |
Exemple 1.2: Aquí crearem una vista anomenada StudentNames a partir de la taula StudentDetails.
Consulta:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Si ara consultem la vista com
SELECT * FROM StudentNames;
Sortida:
S_ID | Nom |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Aspre |
3 | Pràctica |
5 | Ram llista de tipus de lletra a gimp |
Exemple 2: Creació d'una vista a partir de diverses taules
En aquest exemple, crearem una View MarksView que combina dades de les dues taules StudentDetails i StudentMarks. Per crear una vista a partir de diverses taules, simplement podem incloure diverses taules al SELECCIONA declaració.
Consulta:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Per mostrar les dades de View MarksView:
SELECT * FROM MarksView;Sortida:
Nom | Adreça | Marques casos de prova conjunta |
|---|---|---|
Aspre | Calcuta | 90 |
Pràctica | Delhi | 80 |
Dhanraj | Bihar | 95 |
Ram | Rajasthan | 85 |
Gestió de visualitzacions: actualització i eliminació de llistats
1. Llista de totes les vistes d'una base de dades
Podem llistar totes les vistes d'una base de dades mitjançant la instrucció SHOW FULL TABLES o consultant les taules information_schema.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Utilitzant 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. Eliminació d'una vista
SQL ens permet suprimir una vista existent. Podem esborrar o deixa anar Visualització mitjançant la instrucció DROP.
Sintaxi:
DROP VIEW view_name;Exemple: En aquest exemple estem suprimint el View MarksView.
DROP VIEW MarksView;3. Actualització d'una definició de vista
Si volem actualitzar les dades existents dins de la vista, utilitzeu el ACTUALITZACIÓ declaració.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Si voleu actualitzar la definició de la vista sense afectar les dades, utilitzeu la instrucció CREATE OR REPLACE VIEW. Per exemple, afegim elAgecolumna a laMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Nota: No totes les visualitzacions es poden actualitzar mitjançant la instrucció UPDATE.
Regles per actualitzar vistes en SQL:
Cal que es compleixin determinades condicions per actualitzar una vista. Si hi ha alguna d'aquestes condicions no la vista no es pot actualitzar.
- La instrucció SELECT que s'utilitza per crear la vista no hauria d'incloure la clàusula GROUP BY o COMANDA PER clàusula.
- La instrucció SELECT no hauria de tenir el DISTINTS paraula clau.
- La vista hauria de tenir tots els valors NOT NULL.
- La vista no s'ha de crear mitjançant consultes imbricades o consultes complexes.
- La vista s'ha de crear a partir d'una única taula. Si la vista es crea amb diverses taules, no se'ns permetrà actualitzar la vista.
Tècniques avançades amb vistes
1. Actualització de dades mitjançant vistes
Podem utilitzar la instrucció CREATE OR REPLACE VIEW per afegir o substituir camps d'una vista. Si volem actualitzar la vista MarksView i afegir el camp AGE a aquesta vista des de la taula StudentMarks, ho podem fer:
Exemple:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Si obtenim totes les dades de MarksView ara com:
SELECT * FROM MarksView;Sortida:
Nom | Adreça | Marques | Edat |
|---|---|---|---|
Aspre | Calcuta | 90 | 19 |
Pràctica | Delhi | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Ram | Rajasthan | 85 | 18 |
Podem inserir una fila en una Vista de la mateixa manera que ho fem en una taula. Podem utilitzar el INSERTAR A declaració d'SQL per inserir una fila en una vista. A l'exemple següent, inserirem una nova fila a la Vista de detalls de la vista que hem creat més amunt a l'exemple de "creació de vistes des d'una taula única".
Exemple:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Si obtenim totes les dades de DetailsView ara com
SELECT * FROM DetailsView;Sortida:
Nom | Adreça |
|---|---|
Aspre | Calcuta |
Ashish | Durgapur |
Pràctica | Delhi |
Dhanraj | Bihar |
Suresh | Gurgaon |
3. Suprimir una fila d'una vista
Suprimir files d'una vista també és tan senzill com suprimir files d'una taula. Podem utilitzar la instrucció DELETE d'SQL per eliminar files d'una vista. També suprimir una fila d'una vista primer s'elimina la fila de la taula real i el canvi es reflecteix a la vista. En aquest exemple suprimirem l'última fila de la vista DetailsView que acabem d'afegir a l'exemple anterior d'inserció de files.
Exemple:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Si obtenim totes les dades de DetailsView ara com
SELECT * FROM DetailsView;Sortida:
Nom | Adreça |
|---|---|
Aspre | Calcuta |
Ashish | Durgapur |
Pràctica | Delhi |
Dhanraj | Bihar |
4. Clàusula AMB OPCIÓ CHEQUE
La clàusula WITH CHECK OPTION en SQL és una clàusula molt útil per a les vistes. S'aplica a una vista actualitzable. S'utilitza per evitar la modificació de dades (utilitzant INSERT o UPDATE) si no es compleix la condició de la clàusula WHERE de la instrucció CREATE VIEW.
Si hem utilitzat la clàusula WITH CHECK OPTION a la instrucció CREATE VIEW i si la clàusula UPDATE o INSERT no compleix les condicions, retornaran un error. A l'exemple següent, estem creant una vista SampleView des de la taula StudentDetails amb una clàusula WITH CHECK OPTION.
Exemple:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
En aquesta vista, si ara intentem inserir una nova fila amb un valor nul a la columna NOM, donarà un error perquè la vista es crea amb la condició per a la columna NOM com a NOT NULL. Per exemple, tot i que la vista es pot actualitzar, també la consulta següent per a aquesta vista no és vàlida:
INSERT INTO SampleView(S_ID)Crea un qüestionari
VALUES(6);