Está en la página 1de 21

VISTAS

Una vista es una tabla virtual cuyo contenido esté definido por una consulta. Al igual que una
tabla real, una vista consta de un conjunto de columnas y filas de datos con un nombre. Sin
embargo, la vista no existe como conjunto de valores de datos almacenados en una base de
datos. Las filas y las columnas de datos proceden de tablas a las que se hace referencia en la
consulta que define la vista y se producen de forma dinémica cuando se hace referencia a la
vista. Una vista act1'1a como filtro de las tablas subyacentes a las que se hace referencia en
ella. La consulta que defme la vista puede provenir de una 0 de varias tablas. o bien de otras
vistas de la base de datos actual u otras bases de datos. Asimismo, es posiblc utilizar las
consultas distribuidas para defmir vistas que utilicen datos de origencs diversos. Esto puede
resultar de utilidad, por ejemplo, si desea combinar datos de estructura similar que proceden
de distintos servidores, cada uno de los cuales almacena los datos para una regién distinta de
la organizacién.

No existe ninguna restricción a la hora de consultar vistas y muy pocas restricciones a la hora
de modificar los datos de éstas. En la ilustración siguiente se muestra una vista basada en dos
tablas.

No existe ninguna restricción a la hora de consultar vistas y muy pocas2 restricciones a la hora
de modificar los datos de éstas. En la ilustración siguiente se muestra una vista basada en dos
tablas.

Las vistas suclen utilizarse para restringir el acceso del usuario a mas concretas de una tabla
(por ejemplo, para permitir que un empleado solo vea las fllas que guardan su trabajo en una
tabla de seguimiénto de actividad laboral). También suelen usarse para restn'ngir el acceso del
usuario a columnas especiflcas (por ejemplo, permitir que los empleados que no trabajen en el
departamento de nominas vean las columnas de nombre, oficina, teléfono y departamento de
la tabla de empleados, pero no permitir que vean las columnas con los datos de salario u otra
informacion personal). Las vistas suelen usarse tambie’n para combinar columnas de varias
tablas de fonna que parezcan una sola tabla y para agregar informacion en lugar de presentar
los detalles.

Una vista es sencillamente un objeto de base de datos que presenta datos de tablas. Se trata
de una consulta SQL que esté pennanentemente almacenada en la base de datos y a la que se
le asigna un nombre, de modo que los resultados de la consulta almacenada son Visibles a
través de la vista, y SQL permite acceder a estos resultados como si fueran de hecho una tabla
real en la base de datos.

Las vistas suelen utilizarse para centrar, simplificar y personalizar 1a percepcién de la base de
datos para cada usuario. Las vistas pueden emplearse como mecanismos de seguridad, que
permiten a los usuarios obtener acceso a los datos por medio de la vista, pero no les conceden
e1 permiso de obtener acceso directo a las tablas base subyacentes de la vista. Las vistas
también se pueden utilizar para

realizar particiones de datos y para mejorar el rendimiento cuando se copian datos.

Las vistas permitcn a los usuarios centrarse en datos de su intere’s y en tareas especit’ncas de
las que son responsablcs. Los datos innccesarios pucdcn qucdar fuera de la vista. De ese modo,
también es mayor la scguridad dc los datos, dado que los usuarios sélo pueden ver los datos
definidos en la vista y no los que hay en la tabla subyacente.

Las vistas permiten simplificar [a forma en que los usuarios manipulan los datos. Las
combinaciones, proyecciones, consultas UNION y consultas SELECT que se utilizan
frecuentemente pueden defmirse como vistas para que los usuarios no tengan que especiflcar
todas las condiciones y calificaciones cada vez que realicen una nueva operacic’m con los
datos. Por ejemplo, es posible crear como vista una consulta compleja que se utilice para la
elaboracio’n de informes y que realice subconsultas, combinaciones extemas y agregaciones
para recuperar datos de un grupo de tablas. La vista simplifica e1 acceso a los datos ya que
evita la necesidad de escribir o enviar la consulta subyacente cada vez que se genera el
informe; en lugar de eso, se realiza una consulta en la vista. También puede crear funciones en
linea defmidas por el usuario que funcionen de manera légica como vistas parametrizadas o
como vistas con parémetros de condiciones de b&squeda de cléusulas WHERE. ‘

Las vistas permiten que varios usuarios puedan ver los datos de modo distinto, aunque estén
utilizando los mismos simulténeamente. Esto resulta de gran utilidad cuando usuarios que
tienen distintos intereses y calif'lcaciones trabajan con la misma base de datos. Por ejemplo, es
posible crear una vista que recupere {micamente los datos para los clientes con los que trabaja
el responsable comercial de una cuenta. La vista puede determinar qué datos deben
recuperarse en funcién del Id. de inicio de sesién del responsable comercial que utilice la vista.

Es posible utilizar vistas para exportar datos a otras aplicaciones. También es posible importar
informacio’n desde archivos de datos a determinadas vistas, siempre que se puedan insertar
las fllas en la vista mediante la instruccién INSERT.

El operador de conjuntos UNION puede utilizarse dentro de una vista para combinar los
resultados de dos o més consultas de tablas distintas en un solo conjunto. Esta combinacién se
muestra al usuario como una tabla (mica denominada vista dividida. Por ejemplo, si una tabla
contiene datos de ventas de Washington y otra tabla contiene datos de ventas de California,
podn’a crearse una vista a partir de la UNION de ambas tablas. La vista representada incluye
los datos de ventas de ambas zonas. Para utilizar vistas divididas, debe crear varias tablas
idénticas y especificar una restriccién que determine e1 intervalo de datos que se pueden
agregar a cada tabla. A continuacién, se crea la vista a panir de esas tablas base. Cuando se
realiza una consulta en la vista, SQL determina autométicamente qué tablas se ven afectadas
por la consulta y 3610 hace referencia a esas tablas. Por ejemplo, si en una consulta se
especiflca que 5610 se necesitan los datos de ventas de Washington, SQL l'micamente lee la
tabla que contiene los datos de Washington, sin intentar obtener acceso a otms tablas.

Las vistas divididas puedcn estar basadas en datos de distintos origenes, como scrvidorcs
remotos, y no 5610 en tablas de la misma base de datos. Por cjcmplo, para combinar datos de
distintos servidores rcmotos, cada uno de los cuales almaccna datos para una rcgién distima de
su organizacién, puede crear consultas distribuidas que recuperan datos de cada origen de
datos y, a continuacién, crear una vista basada en esas consultas distribuidas. Las consultas
sélo leen datos de las tablas de los servidores remotos que contienen los datos pedidos por la
consulta; no se intenta el acceso al resto de los servidores a los que hacen referencia las
consultas distribuidas de la vista. Cuando realice una particién de datos entre varias tablas o
servidores, las consultas que tengan acceso unicamente a una fraccién de los datos pueden
ejecutarse con mayor rapidez, ya que se deben recorrer menos datos. Si las tablas se
encuentran en servidores distintos 0 en un equipo con varios procesadores, también se podré
recorrer en paralelo cada tabla incluida en la consulta, lo que aumenta el rendimiento de las
consultas. Ademés, las tareas de mantenimiento (como, por ejemplo, la reconstruccién de
indices 0 las copias de seguridad de una tabla), podrén ejecutarse con mayor rapidez.
Mediante 1a utilizacién de una vista dividida, los datos siguen apareciendo como una sola
tabla y SC 165 puede hacer una

consulta tal cual, sin necesidad de hacer referencia manualmente a la tabla subyacente que
corresponda.

Creacio’n de una vista


Para crear vistas se utiliza la sentencia CREATE VIEW. Esta sentencia asigna un nombre a la
vista y especiflca la consulta que la defme. Su sintaxis es la siguiente:

La sentencia CREATE VIEW puede asignar opcionalmente un nombre a cada columna en la


vista recién creada. Si se especiflca una lista de nombres de columnas, deberé tener el mismo
mimero de elementos que el nitmero de columnas producido por la consulta. Obsérvese que
3610 se especiflcan el tipo de datos y la longitud y que las otras caracteristicas de cada
columna se deducen de la defmicién de las columnas en la tabla fuente.

Si la lista de nombres de nombres de columnas se omite en el sentencia CREATE VIEW, cada


columna de la vista adopta el nombre de la columna correspondiente de la consulta. La lista de
nombres de columnas debe ser

especiflcada si la consulta incluye columnas calculadas o si produce dos columnas con nombres
idénticos.

La sintaxis de la sentencia CREATE VIEW es bastante sencilla y se presenta a continuacién.

Las vistas divididas puedcn estar basadas en datos de distintos origenes, como scrvidorcs
remotos, y no 5610 en tablas de la misma base de datos. Por cjcmplo, para combinar datos de
distintos servidores rcmotos, cada uno de los cuales almaccna datos para una rcgién distima de
su organizacién, puede crear consultas distribuidas que recuperan datos de cada origen de
datos y, a continuacién, crear una vista basada en esas consultas distribuidas. Las consultas
sélo leen datos de las tablas de los servidores remotos que contienen los datos pedidos por la
consulta; no se intenta el acceso al resto de los servidores a los que hacen referencia las
consultas distribuidas de la vista. Cuando realice una particién de datos entre varias tablas o
servidores, las consultas que tengan acceso unicamente a una fraccién de los datos pueden
ejecutarse con mayor rapidez, ya que se deben recorrer menos datos. Si las tablas se
encuentran en servidores distintos 0 en un equipo con varios procesadores, también se podré
recorrer en paralelo cada tabla incluida en la consulta, lo que aumenta el rendimiento de las
consultas. Ademés, las tareas de mantenimiento (como, por ejemplo, la reconstruccién de
indices 0 las copias de seguridad de una tabla), podrén ejecutarse con mayor rapidez.
Mediante 1a utilizacién de una vista dividida, los datos siguen apareciendo como una sola
tabla y SC 165 puede hacer una

consulta tal cual, sin necesidad de hacer referencia manualmente a la tabla subyacente que
corresponda.

Creacio’n de una vista

Para crear vistas se utiliza la sentencia CREATE VIEW. Esta sentencia asigna un nombre a la
vista y especiflca la consulta que la defme. Su sintaxis es la siguiente:

La sentencia CREATE VIEW puede asignar opcionalmente un nombre a cada columna en la


vista recién creada. Si se especiflca una lista de nombres de columnas, deberé tener el mismo
mimero de elementos que el nitmero de columnas producido por la consulta. Obsérvese que
3610 se especiflcan el tipo de datos y la longitud y que las otras caracteristicas de cada
columna se deducen de la defmicién de las columnas en la tabla fuente.

Si la lista de nombres de nombres de columnas se omite en el sentencia CREATE VIEW, cada


columna de la vista adopta el nombre de la columna correspondiente de la consulta. La lista de
nombres de columnas debe ser

especiflcada si la consulta incluye columnas calculadas o si produce dos columnas con nombres
idénticos.

La sintaxis de la sentencia CREATE VIEW es bastante sencilla y se presenta a continuacién.

Los parémctros opcionalcs bane dams y propielario indican la base de datos donde se crea la
vista y su propictario. El parz'nnctro m2m/7re_vista es el nombre de la vista. Los nombres de
las vistas debcn cumplir las rcglas de los identificadores. E1 parémetro columna es el nombre
que se va a utilizar para una columna en una vista. solo es necesario asignar un nombre a una
columna en CREATE VIEW cuando una columna proviene de una expresién aritmética, una
funcién o una constante; cuando dos o més columnas puedan tener el mismo nombre
(normalmente, debido a una combinacion); o cuando una columna de una vista recibe un
nombre distinto a] de la columna de la que proviene. Los nombres de columna se pueden
asignar también en la instruccion SELECT. Si no se especiflca columna, las columnas de la vista
adquieren los mismos nombres que las columnas de la instruccion SELECT. En las columnas de
la vista, los permisos de un nombre de columna se aplican a través de una instruccion CREATE
VIEW 0 ALTER VIEW, independientemente del origen de los datos subyacentes. El parémetro n
es un marcador de posicion que indica que se pueden especiflcar varias columnas.

AS indica las acciones que va a llevar a cabo la vista. El parémetro insnmccio'n_seleccio'n es la


instmccion SELECT que define la vista. Puede utilizarse més de una tabla y otras vistas. Para
seleccionar los objetos a los que se hace referencia en la cléusula SELECT de una vista creada,
es necesario tener los permisos adecuados. Una vista no tiene por qué ser un simple
subconjunto de fllas y de columnas de una tabla determinada. Una vista se puede crear con
més de una tabla 0 con otras vistas, mediante una cléusula SELECT de cualquier complejidad.
En una deflnicion de vista indizada, 1a instruccion SELECT debe ser una instruccion para una
(mica tabla o una instruccién JOIN con agregaciones opcionales. Hay unas cuantas
restn'cciones en las cléusulas SELECT en una definicién de vista. Por ejemplo, una instruccion
CREATE VIEW no puede incluir las cléusulas COMPUTE 0 COMPUTE BY, ni incluir la cléusula
ORDER BY, 3 menos que también haya una cléusula TOP en la lista de seleccio’n de la
instmccion SELECT. Tampoco puede incluir la palabra clave INTO ni hacer referencia a una
tabla temporal o a una van'able de tabla. Sin embargo, se pueden utilizar funciones en
instruccio’n_seleccion y pueden utilizarse varias instnlcciones SELECT separadas con UNION 0
UNION ALL.

WITH CHECK OPTION exige que todas las instrucciones de modificacién de datos ejecutadas
contra la vista se adhieran a los criterios establecidos en select_statement. Cuando una flla se
modifica mediante una vista, WITH CHECK OPTION garamiza que los datos permanecerz’m
visibles en toda la vista despuéS de confirmar la modificacion.

WITH ENCRYPTION indica que SQL Server cifra las columnas de la tabla dcl sistema que
conticnen el tcxto dc la instruccién CREATE VIEW. Utilizar WITH ENCRYPTION evita que la vista
se publique como parte de la duplicacion de SQL Server. SCHEMABINDING enlaza la vista al
csqucma. Cuando se especiflca SCHEMABINDING, instruccidn_se/eccion dcbc incluir los
nombres con dos partes (propietarioobjeto) de las tablas, vistas o funciones definidas por el
usuario a las que se hace referencia. Las vistas 0 las tablas que participan en una vista creada
con la cléusula de enlace de esquema no se pueden quitar ni alterar, de forma que deja de
tener un enlace de esquema. De lo contrario, SQL Server genera un error. Ademés, las
instrucciones ALTER TABLE sobre tablas que participan en vistas que tienen enlaces de
esquemas provocarén un error si estas instrucciones afectan a la defmicion de la' vista.
VIEW_METADATA especiflca que SQL Server devolveré a las API de DBLIB, ODBC y OLE DB la
informacion de metadatos sobre la vista, en vez de las tablas o tabla base, cuando se soliciten
los metadatos del modo de exploracion para una consulta que hace referencia a la vista. Los
metadatos del modo de exploracion incluyen informacion sobre la tabla base a la que
pertenecen las columnas del conjunto de resultados. Para las vistas creadas con la opcion
VIEW_METADATA, los metadatos del modo de exploracion devuelven el nombre de vista en
vez de los nombres de la tabla base cuando se describen las columnas de la vista en el
conjunto de resultados. Cuando se crea una vista WITH VIEW_METADATA, todas sus columnas
(excepto timestamp) son actualizables si la vista tiene los desencadenadores INSERT 0 UPDATE
INSTEAD OF.

Una vista 5610 se puede crear en la base de datos actual y puede hacer referencia a un
méximo de 1.024 columnas. Cuando se realiza una consulta a través de una vista, SQL Server
comprueba que todos los objetos de base de datos a los que se hace referencia en la
instruccion existen, que son vélidos en el contexto de la instruccion y que las instrucciones de
modificacion de datos no infringen ninguna regla de integridad de los datos. Las
comprobaciones que no son correctas devuelven un mensaje (16 error. Las comprobaciones
correctas convierten la accion en una accién contra las tablas subyacentes. Si una vista
depende de una tabla (o vista) que se ha eliminado, SQL Server produce un mensaje de error si
alguien trata de utilizar la vista. Si 56 crea una nueva tabla (o vista), y la estructura de la tabla
no cambia de la tabla base anterior para sustituir a la eliminada, se puede volver a utilizar la
vista de nuevo. Si cambia la estructura de la nueva tabla (o vista), seré necesario eliminar . la
vista y volver a crearla. Cuando se crea una vista, el nombre de la vista 56 almacena en la tabla
sysobjects. La informacion acerca de las columnas defmidas en una vista 56 agrega a la tabla
syscolumns y la informacion acerca de las dependencias de la vista se agrega a la tabla
sysdepends. Ademés, el texto de la instruccién CREATE VIEW se agrega a la tabla
syscomments. Se trata de un proceso similar a1 de un procedimiento almacenado; cuando la
vista se ejecuta por primera vez, solo su érbol de consulta se almacena en la cache’ de
procedimientos. Cada vez que se tiene acceso a una vista, su plan de ejecucion se vuelve a
compilar.

V istas horizontales

En las vistas horizontales se restringe el acceso de un usuario {micamente en las mas


seleccionadas de una tabla. Por ejemplo, en la vista Slgulente se muestran solamente los
vendedores de la regién Este.

_,.. mmmxrmm“
Si queremos ver la informacién de la vista recién creada, basta con utihzar la‘ sentenc1a
SELECT sobre la vista (lo mismo que si fuera una tabla).

En la consulta siguiente se crea una vista que contiene fmicamente las oficinas de la regién
Este y se muestra su contenido.
Vistas verticales

En las Vistas verticales se restringe el acceso de un-usuario {micamente a determlnadas


columnas seleccionadas de una tabla. Por ejemplo, en la vista siguiente se muestran
solamente el m'lmero de empleado el nombre y la oficina de representacién para todos los
vendedores (y se muestra su contenido).
Vistas fila/columna

Es muy comlin utilizar vistas que dividan una tabla fuente tanto horizontal como
verticalmente. Por ejemplo, la vista que se crea a continuacién contiene e] m’lmero de cliente,
el nombre de la empresa y el limite de crédito de todos los clientes asignados a1 empleado
mimero 105.
Vistas agrupadas

Se denominan vistas agrupadas las que contienen una cléusula GROUP BY que permite agrupar
filas relacionadas de datos y producir una f11a de resultados para

cada grupo que resume los datos de 686 grupo. En la consulta siguiente se crea una Vista que
contiene datos de pedidos resumidos por cada vendedor.
Vistas compuestas

Las vistas compuestas se crean especiflcando en la definicién de la vista una consulta que
involucre dos o més tablas. De esta forma, la vista extrae sus datos de dos o més tablas y
presenta los resultados como una {mica tabla virtual. Este tipo de vistas suele simplificar las
consultas multitabla. Como ejemplo, creamos una vista en la tabla PEDIDOS que muestre los
nombres de los clientes y de los empleados en vez de sus nL’Imeros.
Actualizacién de vistas

La mayon’a de las vistas suelen actualizarse realizando consultas INSERT 0

UPDATE sobre ellas, pero hay que tener presentes las siguientes reglas:

No se debe especiflcar DISTINCT para que las filas duplicadas no se eliminen de los resultados
de las consultas.

La cléusula FROM debe especiflcar solo una tabla actualizable.

Cada elemento de seleccion debe ser una referencia de columna simple (no puede contener
expresiones, columnas calculadas ni funciones de columna).

La cléusula WHERE no debe incluir una subconsulta. La consulta no debe incluir una cléusula
GROUP BY 0 HAVING.

Como ejemplo introduciremos en la vista de oficinaeste (creada a1 principio

de este capitulo) una fila de valores nuevos.


WWW

Si 56 quiere que los datos pennanecezcan visibles en toda la Vista después de confirmar las
modificaciones en ella, deberé crearse la Vista con la 0pci6n WITH CHECK OPTION. A
continuacién, se presenta un ejemplo.