logo

Vistes SQL

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.

  1. La instrucció SELECT que s'utilitza per crear la vista no hauria d'incloure la clàusula GROUP BY o COMANDA PER clàusula.
  2. La instrucció SELECT no hauria de tenir el DISTINTS paraula clau.
  3. La vista hauria de tenir tots els valors NOT NULL.
  4. La vista no s'ha de crear mitjançant consultes imbricades o consultes complexes.
  5. 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)  
VALUES(6);
Crea un qüestionari