Está en la página 1de 6

TALLER CREACION DE VISTAS EN SQL

Son tablas lógicas que se crean en la base de datos y existen como un objeto más de la misma;
aunque no tienen existencia física, su implementación permite usarlas de la misma manera en
la que se usan las tablas.

La importancia de su implementación radica en que el administrador de la base de datos podrá


restringir el acceso a datos confidenciales y a los desarrolladores les permitirá concentrarse en
los datos más relevantes para las transacciones cotidianas. Además, es la forma más
conveniente para exportar datos a otras aplicaciones sin que creen dificultades frente al diseño
de bases de datos complejas o en la que se requieran consultas heterogéneas.

Sintaxis básica

CREATE VIEW [NombreVista]


AS para iniciar la sentencia

Se redacta el contenido de la sentencia sql, teniendo en cuenta las restricciones. Su utilización


es idéntica a la de una tabla normal de la base de datos.

Utilizando el servidor de base de datos elegido como SQL Server, MySQL o PostgreSQL y la base
de datos Neptuno que se ajuste al mismo, vamos a ejecutar los siguientes ejemplos:

Ejemplo:

CREATE VIEW ProduCategView


AS
SELECT CategoryName, ProductName, UnitPrice, UnitsInStock, UnitsOnOrder FROM Products P
INNER JOIN Categories C ON P.CategoryID=C.CategoryID

/* la ejecutamos utilizándola como una tabla más de la base de datos*/

select *
from ProduCategView

Los nombres de vistas deben ser únicos para cada usuario entre las tablas y vistas ya existentes.
Es posible crear vistas en otras vistas y procedimientos que hagan referencia a vistas; también,
puede definir claves primarias, externas y comunes en las vistas. No es posible asociar reglas,
valores predeterminados ni disparadores a las vistas, ni tampoco crear índices en ellas. No es
posible crear vistas temporales, ni tampoco generar vistas en tablas temporales.

Sintaxis para la creación; a continuación, se muestra la sintaxis completa para la creación de


una vista:

create view [[ database .] owner .] view_name


[( column_name [, column_name ]...)]
as select [distinct] select_statement
[with check option]

Elaborado por: Instructora Sandra Yanneth Rueda Guevara


SENA - Área de Teleinformática
No es necesario especificar nombres de columna en la cláusula create de una instrucción de
definición de vista. SQL Server da a las columnas de la vista los mismos nombres y tipos de datos
que las columnas a las que se hace referencia en la lista de selección de la instrucción select. La
lista de selección puede ser " * ", como en el ejemplo, o una lista total o parcial de los nombres
de columna de las tablas base; sin embargo, si se cumple alguna de las siguientes condiciones,
los nombres de columna deben especificarse en la cláusula create para todas las columnas de
la vista:

● Si cualquiera de las columnas de la vista, se deriva de una expresión aritmética, un agregado,


una función incorporada o una constante. Esto haría que, dos o más columnas de la vista
tengan el mismo nombre; suele ocurrir porque la definición de la vista incluye una
combinación, y las columnas objeto de la combinación tienen el mismo nombre.
● Si quiere asignar a una columna de la vista un nombre diferente del de la columna de la que
se deriva. También puede cambiar el nombre de las columnas en la instrucción select. Se
cambie o no el nombre de una columna de vista, ésta hereda el tipo de datos de la columna
de la que se deriva.

Se pueden crear vistas que no contengan filas duplicadas. Utilice la palabra clave distinct de la
instrucción select para garantizar que cada fila de la vista sea única. Sin embargo, estas vistas
distinct no pueden actualizarse.

A continuación, se muestra una instrucción de definición de vista que cambia el nombre de una
columna de la vista de su nombre en la tabla subyacente:

CREATE VIEW DetallesView (NumPedido, CodigoPoducto, PrecioUnitario, Cantidad, Descuento)


AS SELECT IdPedido, IdProducto, PrecioUnidad, Cantidad, Descuento
FROM [Detalles de Pedidos]

A continuación, se muestra un método alternativo de creación de la misma vista, pero


cambiando el nombre de las columnas en la instrucción select:

CREATE VIEW DetallesView2


AS SELECT IdPedido, CodigoPoducto=IdProducto, PrecioUnidad, Cantidad, Descuento
FROM [Detalles de Pedidos]

Los ejemplos de instrucciones de definición de vista proporcionados a continuación muestran el


resto de las reglas para la inclusión de nombres de columnas en la cláusula create; también se
explica la instrucción select, el uso de la palabra clave distinct y la cláusula with check option de
las definiciones de vista.

Uso de la instrucción select con create view

Se usa para definir la vista; es necesario tener el permiso select para seleccionar cualquier objeto
referenciado en la instrucción select de una vista que se esté creando. Una vista no tiene que
ser necesariamente un simple subconjunto de filas y columnas de una tabla concreta, como en
el ejemplo. Es posible crear una vista a partir de más de una tabla y otras vistas, con una
instrucción select de cualquier grado de complejidad.

Elaborado por: Instructora Sandra Yanneth Rueda Guevara


SENA - Área de Teleinformática
Elaborado por: Instructora Sandra Yanneth Rueda Guevara
SENA - Área de Teleinformática
Existen ciertas restricciones sobre la instrucción select de una definición de vista:

● No se pueden incluir cláusulas order by ni compute.


● No se puede incluir la palabra clave into.
● No se puede hacer referencia a una tabla temporal.

Definición de vista con proyección

Para crear una vista con todas las filas de la tabla Productos, pero sólo con un subconjunto de
sus columnas, escriba la instrucción:

CREATE VIEW ProductosView


AS SELECT IdProducto, PrecioUnidad, UnidadesEnExistencia
FROM Productos

Observe que no se incluye ningún nombre de columna en la cláusula create view. La vista
ProductosView heredará los nombres de columna que aparecen en la lista de selección.

Definición de vista con una columna calculada, combinación de tablas y función de agregado:

A continuación, se muestra una instrucción de definición de vista que crea una vista con una
columna calculada generada a partir de las columnas PrecioUnidad y Cantidad; además,
utilizando la función SUM, y la combinación de la tabla Productos y Detalles de pedidos:

CREATE VIEW TotalesPedido (Pedido, TotalPedido)


as select IdPedido, SUM(cantidad*D.PrecioUnidad)
from Productos P inner join [Detalles de pedidos] D ON P.IdProducto=D.IdProducto
where D.PrecioUnidad > 20 and Cantidad > 8
Group by IdPedido

Vistas con distinct

Es posible asegurarse de que las filas que contiene una vista son únicas, como en el ejemplo:

create view client


as select distinct IdCliente
from Clientes

Actualizar tablas a través de vistas:

Podemos crear vistas con el contenido de una sola tabla y/o definiendo una condición que se
requiera cumplir para la actualización de la misma, se hace con el fin de evitar que los usuarios
manipulen directamente los datos, por lo que es posible acceder a los datos a través de la vista
Utilizando el servidor de PostgreSQL se puede hacer de forma habitual sin embargo, usando otro
servidor debemos verificar si se requiere codificar de forma diferente, por ejemplo a
continuación se describe la forma en la que se debe hacer en SQL Server.

Elaborado por: Instructora Sandra Yanneth Rueda Guevara


SENA - Área de Teleinformática
Uso de la palabra clave with check option con create view

Normalmente, SQL Server no verifica las instrucciones insert y update en vistas para determinar
si las filas afectadas están dentro del alcance de la vista. Una instrucción puede insertar una fila
en la tabla base subyacente pero no en la vista, ni cambiar una fila existente para que deje de
cumplir los criterios de selección de la vista.

Cuando se crea una vista con with check option, cada operación insert y update realizada
mediante la vista se valida según los criterios de selección de la vista. Todas las filas insertadas
o actualizadas mediante la vista deben permanecer visibles por medio de ésta, o la instrucción
no se ejecuta correctamente.

A continuación, se muestra un ejemplo de una vista, con with check option.

create view proveedor


as select * from Proveedores
where Ciudad like 'A%'
with check option

Cuando se intenta insertar una fila mediante proveedor, SQL Server verifica si la nueva fila se
encuentra dentro del alcance de la vista. La siguiente instrucción insert no se ejecuta
correctamente porque la fila nueva tendría un valor ciudad de "Bogota", en lugar de "A%":

insert proveedor (IdProveedor,NombreCompañía,Ciudad)values (30,'CorPoBer','Bogota')

Cuando se intenta actualizar una fila mediante proveedor, SQL Server verifica si la actualización
no hará que la fila desaparezca de la vista. La siguiente instrucción update no se ejecuta
correctamente porque cambiaría el valor de ciudad de "A%" a "Medellin". Después de la
actualización, la fila dejaría de estar visible mediante la vista.

update proveedor
set ciudad = 'Medellin'
where IdProveedor = 28

Vistas derivadas de otras vistas

Si se crea una vista con with check option , todas las vistas derivadas de la vista "base" deben
satisfacer su opción de verificación. Cada fila insertada mediante la vista derivada debe estar
visible a través de la vista base. Cada una de las filas actualizadas mediante la vista derivada
deben permanecer visibles a través de la vista base.

Considere la vista RegionProveedor, que se deriva de Proveedor. La vista nueva incluye


información sobre proveedores que tengan número de fax.

create view RegionProveedor


as select * from Proveedor
where fax <> 'null'

Elaborado por: Instructora Sandra Yanneth Rueda Guevara


SENA - Área de Teleinformática
Actividad para desarrollar: Utilizando la base de datos Neptuno, redactar las sentencias
solicitadas en los siguientes planteamientos.

Para cada planteamiento debe redactar la sentencia de creación de la vista y una sentencia en
la que consulte la vista:

1. Cree una vista con el nombre del producto y la cantidad total vendida del mismo.
2. Cree una vista con el nombre del empleado, la edad y el total recaudado en ventas por
cada uno.
3. Cree una vista con el nombre de la categoría, el nombre de los productos de cada
categoría y los proveedores de cada producto incluya solo las filas de los productos
empacados en botellas (bot).
4. Cree una vista con el código del cliente, el nombre del cliente y el total pagado por cada
cliente.
5. Cree una vista con el código del cliente, el nombre de cliente y el porcentaje que el total
pagado por cada cliente representa frente al total de todas las ventas registradas.
Utilice una subconsulta para obtener el total de todas las ventas y la vista del punto 4
para obtener el porcentaje.
6. crear una vista con las todas las columnas de la tabla productos, y solo las filas en las
que el precio unidad es mayor a 20. Esta vista es para actualizar la tabla.
● Insertar en la vista, un registro en el cual incluya como precio unidad 30, tenga en
cuenta la integridad de datos. Describa lo que sucede.
● Cree la sentencia necesaria para modificar, en la vista, el precio unidad a 10 del
producto 77, intente ahora cambiarlo a 28. Describa lo que sucede en los dos casos.
7. Cree una vista con el requisito Distinct con las regiones de origen de los clientes, omita
las filas con valor nulo. Explique con sus palabras la funcionalidad del requisito Distinct,
en la creación de vistas.

Elaborado por: Instructora Sandra Yanneth Rueda Guevara


SENA - Área de Teleinformática

También podría gustarte