12. VISTAS

5
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:

description

Vistas en SQL SERVER

Transcript of 12. VISTAS

Page 1: 12. VISTAS

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

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

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

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

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'