Sunteți pe pagina 1din 15

UNIVERSIDAD CATOLICA DE TEMUCO

INGENIERIA DE EJECUCION INFORMATICA

GUIA DE VISTAS -SQL


Gua bsica usando Postgre SQL

CURSO : Bases de Datos


PROFESOR : Gustavo Donoso
AYUDANTE : Marcelo Sez

II SEMESTRE DEL 2003


Escrito por Marcelo O. Sez Segura Septiembre 2003
marcelosaez@hotmail.com
Gua de Vistas SQL Postgre SQL

INTRODUCCION A
LAS VISTAS SQL
USANDO POSTGRE-SQL

CONCEPTOS Y DEFINICION
VENTAJAS Y DESVENTAJAS
DE LAS VISTAS SQL
Gua de Vistas SQL Postgre SQL

CONCEPTOS Y DEFINICION DE VISTA.

Los usuarios que acceden a una base de datos relacional, lo hacen tpicamente a travs de
vistas, de modo que diferentes usuarios tienen diferentes vistas.

Una vista, en s, es una tabla virtual derivada, con nombre. El trmino virtual significa que la
tabla no existe como tal, pero para el usuario si parece existir. Por el contrario una tabla es real, en el
sentido que existe y est almacenada en algn dispositivo fsico de almacenamiento.
Las vistas no se sustentan en datos almacenados fsicamente, solo se almacena su definicin
en el catlogo de sistema, y esta construida en base a otras tablas.
Las vistas tienen la misma estructura que una tabla : filas y columnas. los datos se recuperan
mediante una consulta SELECT y se presentarn igual que los de una tabla.

Definicin de vista en SQL.

Como dijimos anteriormente, una vista es una relacin virtual cuya extensin se deriva de las
relaciones bsicas de la base de datos, es decir, por medio de sentencias SELECT.

La sintaxis de definicin de una vista en SQL es:


CREATE [OR REPLACE] VIEW nombre_de_vista AS
sentencia_SELECT

Ejemplo sencillo :

CREATE VIEW cliente_apellido AS


SELECT * FROM clientes
WHERE ap_paterno LIKE A%

En este ejemplo se crea una vista con el nombre cliente_apellido que consulta por todos los
clientes cuyo apellido paterno comienza con la letra A.
Gua de Vistas SQL Postgre SQL

VENTAJAS Y DESVENTAJAS DE LAS VISTAS

Ya sabemos entonces cual es la definicin de vista, puede usted imaginar entonces que este
modelo de representacin de los datos tiene sus ventajas y desventajas, a continuacin veremos
cuales son los beneficios y problemas de usar vistas en un modelo de base de datos relacional.

VENTAJAS EN EL USO DE VISTAS:

SEGURIDAD : Las vistas pueden proporcionar un nivel adicional de seguridad. Por ejemplo,
en la tabla de empleados, cada responsable de departamento slo tendr acceso a la
informacin de sus empleados.
SIMPLICIDAD : Las vistas permiten ocultar la complejidad de los datos. Una base de datos
se compone de muchas tablas. La informacin de dos o ms tablas puede recuperarse
utilizando una combinacin de dos o ms tablas (relacional), y estas combinaciones pueden
llegar a ser muy confusas. Creando una vista como resultado de la combinacin se puede
ocultar la complejidad al usuario.
ORGANIZACION : Las vistas ayudan a mantener uno nombres razonables en la base de
datos para acceder a consultas complejas.
EXACTITUD EN LOS DATOS SOLICITADOS: Permiten acceder a un subconjunto de datos
especficos, omitiendo datos e informacin innecesaria e irrelevante para el usuario.
AMPLIA PERSPECTIVAS DE LA BASE DE DATOS : Proporciona diversos modelos de
informacin basados en los mismos datos, enfocndolos hacia distintos usuarios con
necesidades especificas. El mostrar la informacin desde distintos ngulos nos ayuda a crear
ambientes de trabajo y operacin acordes a los objetivos de la empresa. Debe evaluarse el
perfil y requerimientos de informacin de los usuarios destino de la vista.
TRANSPARENCIA EN LAS MODIFICACIONES : El usuario final no se vera afectado por el
diseo o alteraciones que se realicen en el esquema conceptual de la base de datos. Si el
sistema requiere una modificacin en su funcionamiento interno, podrn afectarse diversas
estructuras que proveen el desempeo de este; se pretende que los usuarios finales no
adviertan tales alteraciones.
Gua de Vistas SQL Postgre SQL

DESVENTAJAS EN EL USO DE VISTAS:


Aunque el uso de vistas implica muchas ventajas y muy provechosas todas, tambin implican
una serie de desventajas a considerar a la hora de disear una base de datos relacional que mas que
nada tienen que ver con las limitantes del motor de base de datos :

CARACTERISTICAS NO SOPORTADAS

NO SON ACTUALIZABLES : Las vistas en Postgre no son actualizables, es decir, si bien es


cierto, son tratadas como tablas, no es posible hacer INSERT, DELETE ni UPDATE sobre las
vistas, esta desventaja es una caracterstica particular en Postgre dado que esta cualidad si
esta disponible en otros motores de bases de datos como ORACLE, Informix y SQL Server, sin
embargo cabe notar que Postgre cubre esta falencia en las vistas con la creacin de reglas
(CREATE RULE) que permite llenar el vaco dejado por la vista.
Gua de Vistas SQL Postgre SQL

INTRODUCCION A
LAS VISTAS SQL
USANDO POSTGRE-SQL

DEFINICION SQL
EJEMPLOS DE VISTAS
LLAMADAS A VISTAS
ELIMINAR UNA VISTA
Gua de Vistas SQL Postgre SQL

DEFINICION DE VISTA SQL.

Como explicamos anteriormente, la sintaxis de definicin de una vista en SQL en Postgre es


bsicamente la siguiente :

CREATE [OR REPLACE] VIEW <nombre_de_vista> AS


< SELECT campos1 [, campo2, ... , campoN ]
FROM tabla1 [, tabla2, ... , tablaN ]
[ WHERE condiciones_de_consulta ]
[ ORDER BY lista_de_campos ]
[ GROUP BY lista_de_campos ] >

Como podemos apreciar, existe una similitud muy grande entre una consulta SELECT y la
creacin de una vista propiamente tal, de hecho, una vista es una definin almacenada de una
consulta SELECT SQL, tambien notemos que esta es una definicin bsica de vista pues las clusulas
de la sentencia de consulta SELECT son muy amplias y pueden tambien aplicarse a la vista..
Gua de Vistas SQL Postgre SQL

EJEMPLOS DE VISTAS SQL.

Para poder mostrar las cualidades y caractersticas de las vistas, utilizaremos el siguiente modelo
de entidad y relacin (MER) de un sistema sencillo de ventas (modelo relacional de la gua de
ejercicios N1 del curso ) :

detalle_ventas unidades
id_v enta <fk1> id_unidad <pk>
id_producto <fk2> productos descripcion
id_unidad <fk3> id_unidad <pk >
cantidad id_producto <pk >
precio_unit id_unidad <fk 1> id_unidad
total_prod id_categoria <fk 2>
nombre
descripcion
venta precio_v enta categoria
producto stock_actual id_categoria <pk >
unidad id_producto <pk > descripcion
id_productos id_categoria <pk>
id_categoria

ventas clientes giros


id_venta <pk> rut_cliente <pk > id_giro <pk>
rut_cliente <fk1> id_ciudad <fk 1> descripcion
rut_vendedor <fk2> id_giro <fk 2> id_giro <pk>
num_factura nombres
fecha apellidos id_giro
hora direccion
forma_pago telefono
id_v enta <pk> fax ciudad
email
id_v enta id_ciudad <pk>
rut_cliente <pk>
id_region <fk>
rut_cliente nombre
id_ciudad <pk >
id_ciudad
vendedores region
rut_vendedor <pk> id_region <pk >
nombres descripcion
apellidos id_region <pk >
rut_vendedor <pk > id_region
rut_vendedor
Gua de Vistas SQL Postgre SQL

CREANDO LAS PRIMERAS VISTAS :


Una vez definido el modelo de datos relacional anterior, podemos comenzar explotar toda la
potencia de las vistas :

EJEMPLO 1 : Supongamos que se necesita implementar una vista con el nombre vista_ciudades
que considere todas las ciudades de la tabla, la regin a la que esta ciudad pertenece, sus
respectivos cdigos de ciudad y regin ordenados por el codigo de la regin y el nombre de la
ciudad, nuestra vista entonces se puede definir de la siguiente manera :

CREATE VIEW vista_ciudades AS


SELECT ciudad.id_ciudad,
ciudad.nombre AS nombre_ciudad,
region.id_region,
region.descripcion AS nombre_region
FROM ciudad, region
WHERE ciudad.id_region = region.id_region
ORDER BY region.id_region, ciudad.nombre

Ciertamente esta podra ser la vista necesitada para nuestro primer ejemplo, pero tambin
podemos considerar las clusulas de unin JOIN para establecer nuestras relaciones, de esta forma
podemos redefinir esta misma vista utilizando en vez de la clausula WHERE una clusula JOIN :

CREATE VIEW vista_ciudades AS


SELECT ciudad.id_ciudad,
ciudad.nombre AS nombre_ciudad,
region.id_region,
region.descripcion AS nombre_region
FROM ciudad JOIN region USING (id_region)
ORDER BY region.id_region, ciudad.nombre
Gua de Vistas SQL Postgre SQL

Claramente entonces esta segunda vista es mas sencilla que la primera y por ende ms veloz
en trminos de tiempos de respuesta del motor de base de datos.
EJEMPLO 2 : Se necesita implementar una vista con el nombre datos_clientes que despliege los
datos personales de nuestros clientes, esto implica saber tambien, el giro del cliente, la ciudad y la
regin en la cual viven, ordenados por apellido y nombres :

CREATE VIEW datos_clientes AS


SELECT clientes.rut_cliente, clientes.nombres,
clientes.apellidos, clientes.direccion,
clientes.telefono, clientes.id_giro,
giros.descripcion AS nombre_giro,
ciudad.id_ciudad,
ciudad.nombre AS nombre_ciudad,
region.id_region,
region.descripcion AS nombre_region
FROM
(clientes JOIN giros USING (id_giro) )
JOIN
(ciudad JOIN region USING (id_region))
USING
(id_ciudad)
ORDER BY clientes.apellidos, clientes.nombres;

En este caso establecemos las relaciones entre cuatro tablas ( clientes, giros, ciudades y
regin) los datos importantes son los del cliente, pero tambin existen otros datos asociados a las
otras tablas. Consideremos que la tabla de regiones no esta directamente vinculada a los clientes,
entonces, establecemos primero una condicin de unin o JOIN entre la tabla de clientes y la de giros
por medio del campo id_giro, este nuevo conjunto de datos se une nuevamente a un segundo
grupo de datos que nacen a partir de la unin entre la tabla de ciudades y la de regiones a travs
del campo id_region finalmente estos dos conjuntos de datos por medio del campo id_ciudad.
Gua de Vistas SQL Postgre SQL

EJEMPLO 3 : Uno de los detalles de PosgreSQL es que no existen comandos directos para
mostrar las tablas de la base de datos con una sentencia en particular, como por ejemplo en
mySQL existe el comando SHOW TABLES que visualiza la lista de tablas de bases de datos, para
ello, crearemos una vista sencilla que consulte al catlogo de tablas de sistema de PostgreSQL, y
en particular a la tabla pg_tables que contiene la lista de tablas de la base de datos para as
emular el comando SHOW TABLES de mySQL :

CREATE VIEW show_tables AS


SELECT tablename AS nombre,
tableowner AS propietario,
hasindexes AS indexada,
hasrules AS reglas,
hastriggers AS desencadenantes
FROM pg_tables
WHERE substr(tablename, 1, 3) <> 'pg_'

Cabe notar que las tablas de sistema en PostgreSQL comienzan todas con el prefijo pg_,
entonces para consultar slo por las tablas de usuario, debemos excluir todas aquellas que son de
sistema. Existen ms tablas de sistema que alojan informacin importante y muchas veces crtica de
la base de datos Postgre, es por ello que no se recomienda manipular los datos de las tablas de
sistema pues se pueden causar daos en la integridad de la base de datos.

EJEMPLO 4 : De forma anloga consultaremos ahora por las vistas existentes en la base de
datos, exeptuando las vistas del catlogo de sistema :

CREATE VIEW show_vistas AS


SELECT viewname AS nombre,
viewowner AS propietario,
definition AS codigo_sql
FROM pg_views
WHERE substr(tablename, 1, 3) <> 'pg_'
Gua de Vistas SQL Postgre SQL

NOTA : Estas dos vistas que hemos creado ya se encuentran implementadas en el catlogo de
PostgreSQL bajo el nombre de pg_tables y pg_views respectivamente.
EJEMPLO 5 : Volviendo a nuestro modelo relacional del sistema de ventas, crearemos una vista
llamada registro_ventas que nos permita visualizar las ventas registradas por el sistema, el
detalle de productos, cliente al que fue realizada la venta, su respectivo giro comercial, as, la
vista puede resultar de la siguiente forma :

CREATE VIEW registro_ventas AS


SELECT ventas.id_venta, ventas.num_factura, ventas.fecha,
ventas.hora, ventas.forma_pago, ventas.rut_cliente,
clientes.nombres AS nombres_cliente,
clientes.apellidos AS apellidos_cliente,
clientes.direccion, clientes.id_giro,
giros.descripcion AS nombre_giro,
ventas.rut_vendedor, vendedores.nombres AS nombre_vendedor,
vendedores.apellidos AS apellidos_vendedor,
detalle_ventas.id_producto,
productos.nombre AS nombre_producto, productos.descripcion,
detalle_ventas.precio_unit, detalle_ventas.total_prod,
productos.id_unidad
FROM
ventas, detalle_ventas, clientes, vendedores,
productos, categoria, giros
WHERE
ventas.id_venta = detalle_ventas.id_venta AND
ventas.rut_cliente = clientes.rut_cliente AND
clientes.id_giro = giros.id_giro AND
ventas.rut_vendedor = vendedores.rut_vendedor AND
detalle_ventas.id_producto = productos.id_producto AND
productos.id_categoria = categoria.id_categoria AND
productos.id_unidad = unidades.id_unidad
ORDER BY
ventas.id_venta, detalle_ventas.id_producto
Gua de Vistas SQL Postgre SQL

De esta forma hemos creado una vista relativamente compleja por el numero de relaciones
entre tablas, sin embargo, todava no sabemos efectuar llamadas a vistas, ese ser nuestro prximo
punto a tratar.

LLAMADAS A VISTAS.

Como lo dijimos anteriormente, las vistas tienen la misma estructura que una tabla, es decir,
poseen filas y columnas, los datos se recuperan mediante una consulta SELECT y se presentarn igual
que los de una tabla, de esta forma solo es necesario saber el nombre de la vista a recuperar, por lo
tanto las llamadas a vistas pueden ser de las siguentes formas.

EJEMPLO 1 :
SELECT * FROM vista_ciudades;

Esta vista devolver tal cual como fu definida el codigo y nombre de ciudad y tambien el
codigo y nombre de regin para cada ciudad, tal cual como fu definida anteriormente,

EJEMPLO 2 :
SELECT * FROM vista_ciudades WHERE id_region = 'R-09';

Esta otra llamada devolver los mismos datos, sin embargo, hemos aadido a las condiciones
internas de la vista nuestra propia condicion, para este caso, que el ID de la regin sera igual a R-09.
Claramente en este caso podemos apreciar la potencialidad de las vistas pues extendemos las
condiciones y acotamos ms an nuestro conjunto de datos pudiendo llegar a generar vistas
genricas que nos permitan obtener no solo un tipo de consulta sino muchas consultas de forma ms
personalizada.

EJEMPLO 3 :
SELECT * FROM vista_ciudades WHERE nombre_ciudad LIKE 'C%'
ORDER BY nombre_ciudad

Recordemos que esta vista (vista_ciudades) fu definida con un orden, sin embargo,
podemos reasignar el orden en el cual deseamos el conjunto de datos, en este caso, por nombre de
Gua de Vistas SQL Postgre SQL

ciudad, de igual forma que en el ejemplo anterior, establecemos una condicin para mostrar solo las
ciudades que comienzen con la letra C.

EJEMPLO 4 :
SELECT * FROM show_tables;

Este ejemplo muy sencillo permite mostrar las tablas que estn definidas en nuestra base de
datos, cabe notar que esta sentencia SELECT es muy similar a la vista de sistema pg_tables que
puede ser llamada de la siguiente forma: SELECT * FROM pg_tables;

EJEMPLO 5 :
SELECT rut_cliente, nombres, apellidos,
direccion, telefono,
nombre_giro, nombre_ciudad
FROM datos_clientes;

En este otro ejemplo acotamos el numero predefinido de campos de la vista a un numero


personalizado y especfico para el propsito que necesitemos, de esta forma podemos omitir an ms
informacin no relevante para nuestras consultas.

EJEMPLO 6 :
SELECT * FROM registro_ventas
WHERE num_factura = '0055009'

La vista registro_ventas fu definida de forma general, sin embargo, las llamadas pueden
ser especficas, de esta forma podemos obtener todos los datos de la factura solicitada, evitando as
volver a crear tediosas consultas SELECT y mejoranto el proceso de desarrollo de aplicaciones de
bases de datos.
Gua de Vistas SQL Postgre SQL

ELIMINAR VISTAS.

Si en algn caso, se necesita modificar una vista, deber eliminarla primero y luego volverla a
crear, de forma similar si tambien necesitas eliminar una vista de la base de datos, la sentencia es la
siguiente :
DROP VIEW <nombre_de_la_vista>

La sentencia es muy sencilla, por lo que no ser necesario aplicar ejemplos para eliminar una
vista, puesto que solo es necesario saber el nombre de ella para eliminarla.
NOTA : No puede eliminar vistas de sistema pues dichas vistas estn pre definidas en el momento de
crear la base de datos

S-ar putea să vă placă și