SQL 1 Vistas
SQL 1 Vistas
7 – VISTAS
1 – Definición
2 – Creación de vistas
a) Horizontales
b) Verticales
c) Subconjuntos fila / columna
d) Agrupados
e) Compuestas
3 – Acceso a vistas
4 – Actualización de vistas
5 – Comprobación de actualizaciones de vistas
6 – Otras cláusulas para creación de vistas.
7 – Eliminación de vistas
8 – Ventajas e inconvenientes de las vistas
1 – DEFINICION:
Las vistas se pueden definir como tablas virtuales basadas en una o más tablas o vistas y
cuyos contenidos vienen definidos por una consulta sobre las mismas. Esta tabla virtual
o consulta se le asigna un nombre y se almacena permanentemente en la BD, generando
al igual que en las tablas una entrada en el diccionario de datos.
Las vistas permiten que diferentes usuarios vean la BD desde diferentes perspectivas,
así como restringir el acceso a los datos de modo que diferentes usuarios accedan sólo a
ciertas filas o columnas de una tabla.
Desde el punto de vista del usuario, la vista es como una tabla real con filas y columnas,
pero a diferencia de esta, sus datos no se almacenan físicamente en la BD. Las filas y
columnas de datos visibles a través de la vista son los resultados producidos por la
consulta que define la vista.
2 – CREACION DE VISTAS:
1
adopta el nombre de la columna correspondiente en la consulta. Existen dos casos en los
que es obligatoria la especificación de la lista de columnas:
Según el propósito con el que se organizan las vistas, pueden clasificarse en los
siguientes tipos:
Son las que restringen el acceso de un usuario a únicamente un conjunto de filas de una
tabla.
EJEMPLO: Si se desea que un director de ventas vea sólo las filas de la tabla
RVENTAS, correspondientes a los vendedores de su región, se debería de definir una
vista para cada región.
Las vistas horizontales son adecuadas cuando la tabla sobre la que se definen contiene
datos que relacionan a varias organizaciones o usuarios, proporcionando una “tabla
privada” para cada usuario compuesta únicamente de las filas necesarias para ese
usuario en concreto.
OTRO EJEMPLO:
1. Definir una vista para el empleado nº 102 que contenga solo los pedidos emitidos,
por los clientes asignados al mismo.
2. Definir una vista, que muestre únicamente clientes que tienen más de 30000 € en
pedidos registrados actualmente.
2
CREATE VIEW clienTresmil AS
SELECT *
FROM CLIENTES
WHERE 30000 < (SELECT SUM (importe)
FROM PEDIDOS
WHERE num_clie = clie);
3. Crear una vista para el Banco Atlántico, que le permita ver la lista de usuarios que
pagan en él.
Son aquellas que restringen el acceso de un usuario sólo a ciertas columnas de una
tabla.
EJEMPLO:
El uso de estas vistas es aconsejable cuando los datos de la tabla son compartidos
también por varios usuarios diferentes. La diferencia está en que ahora solo necesitamos
parte de los campos, no todos.
OTRO EJEMPLO:
4. Definir una vista de la tabla oficinas, para el personal del procesamiento de pedidos
que incluya la ciudad, el número de oficina y la región.
3
CREATE VIEW vistaClien AS
SELECT rep_clie
FROM CLIENTES;
Lo más habitual es crear vistas con parte de las filas y parte de las columnas de una
tabla. Por ejemplo:
Definir una vista que contenga el número de cliente, el nombre de la empresa y el límite
de crédito de todos los clientes asignados al vendedor Bill Adams.
OTRO EJEMPLO:
Crear una vista con los datos personales de los usuarios de Luanco.
d) Agrupados
Son vistas que incluyen una cláusula GROUP BY en la consulta especificada. Estas
vistas incluyen siempre una lista de nombres de columna.
EJEMPLO:
Definir una vista que contenga los datos sumarios de los pedidos para cada vendedor.
4
SELECT COUNT(*), SUM(importe), AVG(importe), MAX(importe), MIN(importe),
rep
FROM PEDIDOS
GROUP BY rep_clie;
OTRO EJEMPLO:
1- Definir una vista que muestre el total de ventas y el promedio de edad de cada
oficina.
2- Crear una vista que muestre el número de usuarios que pagan en cada banco, junto
con el promedio de pago (el máximo y el mínimo).
e) Compuestas
Son vistas creadas a partir de los datos de dos o más tablas. Presentan los datos como
una única tabla virtual. Al igual que las anteriores se utilizan frecuentemente para
facilitar el manejo de consultas complejas de uso frecuente en la base.
EJEMPLO:
Crear una vista de la tabla PEDIDOS con los nombres de los vendedores y clientes, en
lugar de sus respectivos números.
OTRO EJEMPLO
1-Listado del nombre de los clientes y la descripción e importe total de cada producto
de los productos pedidos por el mismo.
5
WHERE num_clie = clie
AND id_producto = producto
AND id_fab = fab
GROUP BY empresa, id_producto, descripcion;
3-Crear una vista q permita obtener un listado del nombre y apellidos de los clientes
junto con el nombre del banco en el que pagan.
3 – ACCESO A VISTAS
El usuario accede a los datos de una vista exactamente igual que si estuviera accediendo
a una tabla. De hecho, en general, el usuario no sabrá que está consultando una vista.
EJEMPLOS:
6
WHERE rep = num_empl
AND clie = num_clie; ] Esta es otra vista sobre la que trabajo
3) Mostrar los pedidos actuales mayores de 2000€ ordenados por importe, junto con el
nombre del cliente y el vendedor.
Para que una vista se pueda actualizar debe existir una relación directa entre las filas y
columnas de la vista y las de la tabla fuente. Según el estándar ANSI, se puede
actualizar a través de las vistas si la consulta que la define, satisface las siguientes
restricciones:
1ª - No especifica DISTINCT
2ª - FROM debe especificar una única tabla
3ª - La lista de selección no puede contener expresiones, columnas calculadas o
funciones de columna, solo referencias a columnas simples.
4ª - WHERE no debe incluir subconsultas.
5ª - No debe incluir ni GROUP BY ni HAVING.
EJEMPLO:
UPDATE repEste
7
SET r_oficina = 21 //aquí se equivocan y en lugar de poner 12 ponen 21
WHERE num_empl = 104;
Con lo cual este señor no figuraría en la vista, pero sí en la tabla.
Para evitar errores se usará la cláusula WITH CHECK OPTION. Añadiendo esta
cláusula a la creación de una vista se asegura que las operaciones de inserción y
actualización sobre la vista satisfagan el criterio de búsqueda, definido en la cláusula
WHERE de la consulta asociada a la vista. De esta forma se asegura que las filas
insertadas o actualizadas sean visibles a través de la vista. En caso de que la fila a
insertar o modificar no satisfaga la condición del WHERE, la sentencia de actualización
falla sin llevarse a cabo la operación.
EJEMPLO:
UPDATE clieLuanco
SET localidad = ‘AVILES’
WHERE nombre = ‘JOSE’
AND apellidos = ‘RUIZ PEÑA’;
A) OR REPLACE:
Cuando se necesita modificar la definición de una vista, la única solución es crear una
nueva vista con el mismo nombre ya que no existe una sentencia similar a la ALTER
TABLE. Para evitar que tener que eliminar la vista y volverla a crear, el motor
proporciona esta cláusula, la cual permite sustituir la definición de una vista por otra
nueva, es decir, la reemplaza.
8
B) WITH READ ONLY:
7 – Eliminación de vistas
VENTAJAS:
- Las consultas con selecciones complejas se simplifican.
- Permiten personalizar la BD para los distintos usuarios, de forma que presenten
los datos con una estructura lógica para los mismos.
- Control de acceso a la BD, haciendo que los usuarios vean y manejen solo
determinada información.
INCONVENIENTES:
- Las restricciones referidas a las actualizaciones.
- La caída del rendimiento cuando se construyen vistas con selecciones complejas.
EJERCICIOS:
1) Crear una vista con el nombre de los usuarios y la actividad e las que está dado de
alta junto con la fecha en la que se dio de alta.
2) Crear una vista de pagos en las que aparezca el nombre del usuario en lugar de su
código.
CREATE VIEW pagosSocio (Nom_usu, N_mes, Cuota, Observac) AS
SELECT nombre, numero_mes, cuota, observaciones
9
FROM USUARIOS, PAGOS
WHERE codigo_usuario = num_socio;
3) Crear una vista que muestre la información de las actividades de Artes marciales.
Crear o insertar a través de esta vista una nueva actividad que es la siguiente: AM00003,
TAEKWONDO, 12.5. Mostrar un listado de la vista creada y después hacer una
modificación, cambiando el código a MA00003. Volvemos a mostrar el listado. A través
de la tabla, volver a dejar las cosas como estaban y modificar la lista para que la vista
compruebe que las actualizaciones sean correctas. Una vez hecho esto, volvemos a
hacer la modificación para comprobar que no nos deja.
UPDATE infoArtesM
SET codigo_actividad = ’MA00003’
WHERE codigo_actividad = ‘AM00003’;
ROLLBACK;
Y vuelvo a poner el insert y el update que hemos hecho antes, me da el mensaje de error
siguiente: “violación de la cláusula-WHERE en la vista WITH CHECK OPTION”.
4) Crear una vista de las actividades, con comprobación de actualización, cuya cuota sea
superior a 1000 ptas. Intentar realizar después las siguientes inserciones:
- E00001, BALONCESTO, 600
- E00002, FUTBOL, 1100
10
VALUES (‘E00002’, ‘FUTBOL’, 1100);
5) Crear una vista de los usuarios de Mieres que no hayan realizado ningún pago.
6) Crear una vista con todos los datos de los bancos, y la cantidad de clientes que
realizan pagos en ellos.
7) Crear una vista de solo lectura con los datos de los usuarios de Mieres. Intentar
modificar la cuota de uno de estos usuarios elevando su cuota un 1%.
UPDATE datosUserMieres
SET cuota_socio = cuota_socio * 0.1;
11