12. VISTAS
-
Upload
moises-taboada -
Category
Documents
-
view
217 -
download
0
description
Transcript of 12. VISTAS
![Page 1: 12. VISTAS](https://reader036.fdocuments.es/reader036/viewer/2022081811/5695d0791a28ab9b02929d07/html5/thumbnails/1.jpg)
Facultad de Ingeniería Industrial, Sistemas e Informática Ing. Ana Doris M. Barrera Loza
VISTAS
Una vista es una consulta almacenada que devuelve un conjunto de
resultados provenientes de una o más tablas y a la que se le pone un nombre.
Una vista es una “tabla virtual”, aparece como una tabla más del esquema,
aunque realmente no lo es.
Desde el punto de vista del usuario, la vista es como una tabla real pero sus
datos no se almacenan físicamente en la Base de Datos.
Dos son las principales razones por las que podemos crear vistas:
Seguridad, nos pueden interesar que los usuarios tengan acceso a una
parte de la información que hay en una tabla, pero no a toda la tabla.
Comodidad, como hemos dicho el modelo relacional no es el más
cómodo para visualizar los datos, lo que nos puede llevar a tener que
escribir complejas sentencias SQL, tener una vista nos simplifica esta
tarea.
CREACION DE VISTAS
Para crear una vista debemos utilizar la sentencia CREATE VIEW,
debiendo proporcionar un nombre a la vista y una sentencia SQL SELECT
válida.
CREATE VIEW <nombre_vista>
AS
(<sentencia_select>)
Ejemplo: Crear una vista donde visualicemos los campos nombre de la
compañía, nombre del contacto, ciudad y país de los proveedores.
CREATE VIEW V_Proveedor
AS
SELECT Companyname, Contactname, city, country
FROM Suppliers
No se pueden incluir la cláusula ORDER BY dentro de una vista.
Opcionalmente se le puede asignar un nombre a cada columna de la vista.
Existen dos casos en donde es obligatoria la asignación de nombres a las
columnas:
![Page 2: 12. VISTAS](https://reader036.fdocuments.es/reader036/viewer/2022081811/5695d0791a28ab9b02929d07/html5/thumbnails/2.jpg)
Facultad de Ingeniería Industrial, Sistemas e Informática Ing. Ana Doris M. Barrera Loza
1) Cuando la consulta incluyo consultas calculadas.
2) Cuando la consulta produce nombres idénticos.
Según con el propósito con el que se organizan las vistas, pueden clasificarse
en los siguientes tipos:
a) Horizontales o por Restricción
Son las que restringen el acceso de un usuario a únicamente un conjunto
de filas de una tabla.
Ejemplo: Si un empleado desea ver las ventas realizadas por él, se debe
crear la siguiente vista:
CREATE VIEW V_Venta5
AS
SELECT *
FROM Orders
WHERE employeeId = 5
Las vistas horizontales son adecuadas cuando se quiere proporcionar una
“tabla privada” para cada usuario compuesta con las final que realmente
son necesarias sólo para ese usuario.
b) Verticales o por Proyección
Son aquellos que restringen el acceso de un usuario sólo a ciertas
columnas de una tabla.
Ejemplo: El Jefe de Personal quiere un listado sólo con el código del
empleado, su nombre y apellido, dirección y ciudad.
CREATE VIEW V_Lista_Emp
AS
SELECT EmployeeID,FirstName, LastName, Address, City
FROM Employees
c) Subconjuntos filas/columnas
Consiste en crear filas con ciertas filas y ciertas columnas de una tabla.
Ejemplo: Visualizar el nombre de la Compañía, nombre del Contacto y
dirección de todos los clientes de la ciudad de Madrid
![Page 3: 12. VISTAS](https://reader036.fdocuments.es/reader036/viewer/2022081811/5695d0791a28ab9b02929d07/html5/thumbnails/3.jpg)
Facultad de Ingeniería Industrial, Sistemas e Informática Ing. Ana Doris M. Barrera Loza
CREATE VIEW V_Clientes_Madrid
AS
SELECT CompanyName, ContactName, Address
FROM Customers
Where City = 'Madrid'
d) Agrupados
Son vistas que incluyen la cláusula GROUP BY en la consulta
especificada.
Ejemplo: Hacer una vista que contenga la cantidad de pedidos por
trabajador
CREATE VIEW v_cantidad AS
SELECT EmployeeId,Count(OrderId) Cantidad
FROM Orders
GROUP BY EmployeeID
e) Compuestas
Son vistas creadas a partir de datos de dos o más tablas. Presentan los
datos como una única tabla virtual.
Ejemplo: Hacer una vista de la tabla Pedidos, pero visualizando el nombre
y apellido de los empleados y Nombre de las compañías que son nuestros
clientes en vez de sus respectivos códigos.
CREATE VIEW V_Pedidos AS
SELECT OrderID, FirstName Nombre_Empleado,LastName
Apellido_Empleado, CompanyName Cliente
FROM Orders O INNER JOIN Employees E
ON E.EmployeeID = O.EmployeeID INNER JOIN Customers C
ON O.CustomerID = C.CustomerID
ACCESO A VISTAS
El usuario accede a los datos de una vista exactamente igual como si estuviera
accediendo a los datos de una tabla.
Ejemplo: Visualizar los pedidos de los trabajadores cuyo apellido empiezan con
las letras de la A hasta la E.
![Page 4: 12. VISTAS](https://reader036.fdocuments.es/reader036/viewer/2022081811/5695d0791a28ab9b02929d07/html5/thumbnails/4.jpg)
Facultad de Ingeniería Industrial, Sistemas e Informática Ing. Ana Doris M. Barrera Loza
SELECT *
FROM V_Pedidos
WHERE Apellido_Empleado LIKE '[A-E]%'
ORDER BY Apellido_Empleado
MODIFICACION DE VISTAS
Si queremos, modificar la definición de nuestra vista podemos utilizar la
sentencia ALTER VIEW. En este caso queremos añadir los campos dirección y
teléfono a la vista.
ALTER VIEW V_Proveedor
AS
SELECT Companyname, Contactname, city, country, Address, Phone
FROM Suppliers
ELIMINACION DE VISTAS
Podemos eliminar la vista a través de la sentencia DROP VIEW. Para eliminar
la vista que hemos creado anteriormente se utilizaría:
DROP VIEW V_Proveedor
ACTUALIZACION A TRAVES DE LAS VISTAS
Para que una vista se pueda actualizar debe existir una relación directa entre
las filas y las columnas de la vista y las de la tabla fuente. Se puede actualizar
a través de las vistas si la consulta que la define, satisface las siguientes
restricciones:
1.- No utiliza DISTINCT
2.- En FROM solo debe indicar una tabla.
3.- La lista de selección no puede contener expresiones, columnas calculadas
o funciones de columna.
4.- WHERE no debe incluir subconsultas.
5.- No debe de incluir GROUP BY ni HAVING.
![Page 5: 12. VISTAS](https://reader036.fdocuments.es/reader036/viewer/2022081811/5695d0791a28ab9b02929d07/html5/thumbnails/5.jpg)
Facultad de Ingeniería Industrial, Sistemas e Informática Ing. Ana Doris M. Barrera Loza
Ejemplo: Crear una vista donde veamos todas las zonas de la región Norte
CREATE VIEW V_R_Norte AS
SELECT *
FROM Territories
WHERE RegionId = 3
Ahora añadimos una nueva zona en la región Norte a través de la consulta
V_R_Norte
INSERT INTO V_R_Norte (TerritoryId, TerritoryDescription,
RegionId)
VALUES ('45850', 'Los Angeles', 3)
Ahora cambiaremos una zona (48084) a otra región (2).
UPDATE V_R_Norte
SET Region Id = 2
WHERE TerritoryId = '48084'
Ahora eliminamos la zona 45850.
DELETE
FROM V_R_Norte
WHERE TerritoryId = '45850'