Вы находитесь на странице: 1из 25

Por: Dr.

Cristian Pinzn

CONTENIDO
Sintaxis de Vistas
Concepto de Vistas
Crear Vistas
Modificar Vistas
Eliminar Vistas
Restricciones de Vistas

Por: Dr. Cristian Pinzn

Sintaxis de la Vistas
CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [
WITH <view_attribute> [ ,...n ] ] AS select_statement [ WITH CHECK
OPTION ] [ ; ] <view_attribute> ::= { [ ENCRYPTION ] [
SCHEMABINDING ] [ VIEW_METADATA ] }

ALTER VIEW NombreVista

DROP VIEW NombreVista

Por: Dr. Cristian Pinzn

Vista
Una vista es una alternativa para mostrar datos de
varias tablas.
Una vista es como una tabla virtual que almacena
una consulta. Los datos accesibles a travs de la
vista no estn almacenados en la base de datos
como un objeto.
Una vista se referencia igual que una tabla base, y
los resultados se presentan de igual forma a una
consulta sobre una tabla base.
Por: Dr. Cristian Pinzn

Ventajas del Uso de Vistas:Vista


Ocultar informacin: Permitiendo el acceso a algunos datos
y manteniendo oculto el resto de la informacin que no se
incluye en la vista. El usuario opera con los datos de una
vista como si se tratara de una tabla, pudiendo modificar
tales datos.
Simplificar la administracin de los permisos de usuario: se
pueden dar al usuario permisos para que solamente pueda
acceder a los datos a travs de vistas, en lugar de
concederle permisos para acceder a ciertos campos, as se
protegen las tablas base de cambios en su estructura.
Mejorar el rendimiento: se puede evitar tipear instrucciones
repetidamente almacenando en una vista el resultado de
una consulta compleja que incluya informacin de varias
tablas.
Por: Dr. Cristian Pinzn

Vista
Podemos crear vistas con:

Un subconjunto de registros y campos de una


tabla.
Una unin de varias tablas.
Una combinacin de varias tablas.
Un resumen estadstico de una tabla.

Un subconjunto de otra vista


Combinacin de vistas y tablas.
Por: Dr. Cristian Pinzn

Vista
Existen algunas restricciones para el uso de "create view", a
saber:
No puede incluir las clusulas "compute" ni "compute by"
ni la palabra clave "into";
No se pueden crear vistas temporales ni crear vistas
sobre tablas temporales.
No se pueden asociar reglas ni valores por defecto a las
vistas.
No puede combinarse con otras instrucciones en un
mismo lote.
Se pueden construir vistas sobre otras vistas.

Por: Dr. Cristian Pinzn

PROBLEMAS PRCTICOS

Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
CREATE VIEW V_CLIENTES
AS
SELECT Codigo_Cliente, Nombre_Cliente,
TelefonoMovil_Cliente, Direccion_Cliente
FROM TB_Cliente
--Ejecucin de la Vista para todos los campos
SELECT * FROM V_CLIENTES
--Ejecucin de la Vista Determinados campos de la vista

SELECT codigo_cliente, Direccion_Cliente FROM


V_CLIENTES
Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
CREATE VIEW V_CLIENTES
AS
SELECT Codigo_Cliente, Nombre_Cliente,
TelefonoMovil_Cliente, Direccion_Cliente
FROM TB_Cliente
--Resultado de ejecutar el comando CREATE
Comandos completados correctamente.
--Modificar Vista con ALTER
ALTER VIEW V_CLIENTES
AS
SELECT Codigo_Cliente, Nombre_Cliente,
TelefonoMovil_Cliente
FROM TB_Cliente
GO
--Resultado de ejecutar el comando Alter
Comandos completados correctamente.

Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
--Eliminar Vista con DROP
DROP VIEW V_CLIENTES
Comandos completados correctamente.

--Ejecutar nuevamente la Vista despus de ejecutar el


comando DROP
SELECT * FROM V_CLIENTES
--Resultado de Ejecucin
Mens. 208, Nivel 16, Estado 1, Lnea 1
El nombre de objeto 'V_CLIENTES' no es vlido.

Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
--Creando vista de la Tabla Proveedores
CREATE VIEW V_PROVEEDORES
AS
SELECT Codigo_Proveedor, Nombre_Proveedor, PrimerApellido_Proveedor
FROM TB_Proveedor
GO
--Creando una vista a partir de la vista Proveedores
SELECT * FROM V_PROVEEDORES
SELECT * FROM TB_PROVEEDOR
CREATE VIEW V_PRODUCTOS_VPROVEEDORES
AS
SELECT VTBPROV.Codigo_Proveedor, Nombre_Proveedor,
TBPROD.Codigo_Producto, Descripcion_Producto
FROM V_PROVEEDORES VTBPROV, TB_Producto TBPROD
WHERE VTBPROV.Codigo_Proveedor = TBPROD.Codigo_Proveedor
GO
Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
--Creando vista de la Tabla Proveedores
CREATE VIEW V_PROVEEDORES
AS
SELECT Codigo_Proveedor, Nombre_Proveedor, PrimerApellido_Proveedor
FROM TB_Proveedor
GO
--Creando una vista a partir de la vista Proveedores
SELECT * FROM V_PROVEEDORES
SELECT * FROM TB_PROVEEDOR
CREATE VIEW V_PRODUCTOS_VPROVEEDORES
AS
SELECT VTBPROV.Codigo_Proveedor, Nombre_Proveedor,
TBPROD.Codigo_Producto, Descripcion_Producto
FROM V_PROVEEDORES VTBPROV, TB_Producto TBPROD
WHERE VTBPROV.Codigo_Proveedor = TBPROD.Codigo_Proveedor
GO
--Ejecutando la Vista
SELECT * FROM V_PRODUCTOS_VPROVEEDORES
Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
--Creando vista de Clientes con Condicional AND - LIKE
ALTER VIEW V_Clientes_Direccion_Santiago
AS
SELECT codigo_cliente, nombre_cliente,
PrimerApellido_Cliente telefonomovil_cliente,
email_Cliente, Direccion_Cliente
FROM TB_Cliente
WHERE nombre_cliente LIKE 'C%' AND Direccion_Cliente
='Chiriqui
--Ejecutando la Vista
SELECT * from V_Clientes_Direccion_Santiago

Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
-- Crear Vista para Totalizar las Compras de los Clientes
(uso de la funcin SUM() Group By
Create VIEW V_Total_Factura_Cliente
AS
SELECT (TB_Cliente.Nombre_Cliente + ' ' +
TB_Cliente.PrimerApellido_Cliente) AS 'NOMBRE',
SUM(MONTO_TOTAL) AS 'MONTO' FROM TB_CLIENTE,
TB_Factura_Venta
WHERE TB_CLIENTE.Codigo_Cliente =
TB_Factura_Venta.Codigo_Cliente
GROUP BY (TB_Cliente.Nombre_Cliente + ' ' +
TB_Cliente.PrimerApellido_Cliente)
GO
--Ejecutando la Vista
SELECT * from V_Total_Factura_Cliente
Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
-- Crear Vista para Totalizar y aplicar Condicional HAVING
CREATE VIEW V_Monto_Factura_Proveedor_Mayor_5000
AS
SELECT PROV.Nombre_Proveedor +' '+
PROV.PrimerApellido_Proveedor AS 'Nombre del Proveedor',
FC.codigo_factura, sum(monto) AS 'Monto Total'
FROM TB_Pago_Factura_Compra AS PFC, tb_factura_compra AS
FC, TB_Proveedor AS PROV
WHERE PFC.Codigo_Factura = FC.Codigo_Factura and
FC.Codigo_Proveedor = PROV.Codigo_Proveedor
GROUP BY nombre_proveedor, PrimerApellido_Proveedor,
FC.Codigo_Factura
having SUM(Monto) > 5000
--Ejecutar vista
SELECT * FROM V_Monto_Factura_Proveedor_Mayor_5000
Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
-- Crear Vista Utilizando el Comando UNION
CREATE VIEW V_VENTA_COMPRA
AS
Select TB_Factura_Venta.Codigo_Factura as 'Numero Factura',
TB_Factura_Venta.Fecha_Factura,
TB_Factura_Venta.Monto_Total as 'Monto Total',
'Venta' as 'Tipo Transaccion'
FROM TB_Factura_Venta
UNION
SELECT TB_Factura_Compra.Codigo_Factura, Fecha_Factura,
TB_Factura_Compra.Monto_Total, 'Compra' as 'Transaccion'
FROM TB_Factura_Compra
GO
--Ejecucin de la Vista
SELECT * FROM V_VENTA_COMPRA
Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
-- Actualizacin de Datos con UPDATE sobre una VISTA
SELECT * FROM V_CLIENTES
UPDATE V_CLIENTES SET Direccion_Cliente ='Bocas del Toro'
WHERE Direccion_Cliente='Chiriqui'

-- Verificacin de la Actualizacin
SELECT * FROM V_CLIENTES
-- Resultados de la Ejecucin
(3 filas afectadas)

Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
-- Eliminacin de Registros con DELETE sobre una VISTA

SELECT * FROM V_CLIENTES


--Delete desde las Vistas

DELETE

FROM V_CLIENTES WHERE Saldo_Cliente =0

-- Resultados de la Ejecucin
(2 filas afectadas)

Por: Dr. Cristian Pinzn

Problema Prctico
--Ejemplo #
-- Problema con el ORDER BY No Soportado en Vistas

ALTER VIEW V_CLIENTES


AS
SELECT Codigo_Cliente, Nombre_Cliente,
TelefonoMovil_Cliente, Direccion_Cliente
FROM TB_Cliente ORDER BY Nombre_Cliente
GO
-- Resultados de la Ejecucin
Mens. 1033, Nivel 15, Estado 1, Procedimiento V_CLIENTES, Lnea 6
La clusula ORDER BY no es vlida en vistas, funciones insertadas,
tablas derivadas, subconsultas ni expresiones de tabla comn,
salvo que se especifique tambin TOP, OFFSET o FOR XML.

Por: Dr. Cristian Pinzn

PROBLEMAS PROPUESTOS

Por: Dr. Cristian Pinzn

Problema Prctico
/*
Problema Propuesto #1: Escribir el cdigo de la Vista para
consultar la factura de venta cuyo valor sea el ms alto y
el ms bajo.
*/

/*
Problema Propuesto #2: Escribir el cdigo de la Vista para
consultar todas las compras del Cliente con codigo 00001 y
donde se haya vendido del producto 100001. Mostrar
informacin: Codigo del cliente, Cdigo de factura,
Cantidad comprada.
*/

Por: Dr. Cristian Pinzn

Problema Prctico
/*
Problema #3: Escribir el cdigo de la Vista para consultar
para cada cliente el gran monto total de todas sus facturas
en el rango de fecha que comprende desde el '28/03/2012' al
'20/04/2012'. Se debe mostrar la informacin del cdigo del
cliente, nombre, apellido y el monto total.
*/
/*
Problema #4.Escribir el cdigo de la Vista para consultar
el codigo del proveedor, nombre del Proveedor, primer
apellido y datos de contacto de los proveedores con
localizacin en chitre y
Panam y vendan productos cuyo
precio de costo sea superior a 50 balboas
*/

Por: Dr. Cristian Pinzn

Problema Prctico
/*
Problema #5: Escribir el cdigo de la Vista para Consultar
el gran monto total de venta de cada producto registrado,
en todas las facturas de venta. Sin embargo, se mostrarn
slo aquellos productos que hayan sobrepasado la meta de
venta establecida en 1500.00. En la consulta se debe
presentar el cdigo del producto, descripcin y el monto
total de venta.
*/

Por: Dr. Cristian Pinzn

Por: Dr. Cristian Pinzn