Capítulo 9 CLASE 9

9.1 Vistas SQL

En su forma más básica, la sin- taxis para una vista es la siguiente:

CREATE VIEW < nombre de la vista >

[(< nombres de las columnas de la vista >)] AS < expresión de consulta >

[ WITH CHECK OPTION ]

Por ahora nos centraremos sólo en las primeras dos líneas de la sintaxis y se dejará WITH CHECK OPTION para después, en la sección “Creación de vistas actualizables.” Como se muestra en la primera línea de la sintaxis, se debe proporcionar un nombre para la vista. Además, se deben proporcionar los nombres para las columnas en las siguientes circunstancias:

  • Si alguno de los valores de columna se basa en algún tipo de operación que calcule el valor que se insertará en la columna, en lugar de que el valor se copie directamente de la tabla.

  • Si los nombres de las columnas de la tabla se duplican, lo cual puede suceder cuando las tablas se unen.

Incluso si no se requiere proporcionar los nombres de las columnas, se pueden proporcionar si así lo desea. Por ejemplo, puede encontrar que desea cambiar los nombres para que sean más lógicos para usuarios en particular. Sin embargo, si proporciona los nombres de las columnas utilizando la sintaxis , se deben proporcionar los nombres para todas las columnas.

La vista DISCOS_COMPACTOS_EN_EXISTENCIA obtiene los datos de la tabla INVENTARIO_DISCO_COMPACTO e incluye tres columnas de esa tabla. Para crear la vista, utilice la siguiente instrucción CREATE VIEW:

CREATE VIEW DISCOS_COMPACTOS_EN_EXISTENCIA

( DISCO_COMPACTO, DERECHOSDEAUTOR, EN_EXISTENCIA ) AS

SELECT TITULO_CD, DERECHOSDEAUTOR, EN_EXISTENCIA

FROM INVENTARIO_DISCO_COMPACTO;

Esta vista es la más simple de todos los tipos de vistas a crear. Se basa en una tabla y extrae tres de las seis columnas de esa tabla. Tenga en cuenta que mientras SQL normalmente requiere cláusulas para estar en un orden particular, no hay restricciones en cuanto a espacios y saltos de línea. Por ejemplo, cuando se crean las vistas, se prefiere poner la lista de nombres de columna (cuando se presente) en una línea nueva y colocar la palabra clave AS al final de la línea que precede la expresión de consulta. Otros prefieren colocar la palabra clave AS en una línea, y aun otros prefieren colocarla al comienzo de la primera línea de la expresión de consulta. El RDBMS no tomará en cuenta la forma en que lo hace, pero la adopción de un estilo y el adherirse a él hará que SQL sea más fácil de leer, entender y mantener.

9.2 Creación de vistas actualizables

Hay bases lógicas que pueden deducirse de estas directrices:

Los datos sin una vista no pueden ser resumidos, agrupados o eliminados automáticamente.

Por lo menos una columna de la tabla fuente debe ser actualizable. Cada columna en la vista debe ser trazable exactamente a una columna fuente en una tabla. Cada fila en la vista debe ser trazable exactamente a una fila fuente en una tabla. Sin embargo, note que muchos proveedores de productos permiten modificaciones (pero no insertan) a las vistas creadas a partir de varias tablas, siempre y cuando la actualización sólo haga referencia a columnas que tracen a sólo una tabla base.

Ahora suponga que quiere saber el promedio de la comisión por cada año para todos los empleados. Se puede crear una vista que determine el promedio por cada año y muestre esos promedios en tres columnas separadas. Para hacerlo se utiliza la siguiente instrucción CREATE VIEW:

CREATE VIEW COM_EMP ( PROM_1999, PROM_2000, PROM_2001 ) AS

SELECT PROM(AÑO_1999), PROM(AÑO_2000), PROM(AÑO_2001)

FROM COMISIONES_EMPLEADO;

Como se puede ver de la instrucción, la vista COM_EMP contiene tres columnas: PROM_ 1999, PROM_2000 y PROM_2001. La cláusula SELECT extrae la información de las tres columnas en la tabla COMISIONES_EMPLEADO (AÑO_1999, AÑO_2000 y AÑO_2001) y utiliza la función PROM para encontrar el promedio para todos los valores en cada columna,

9.3 DROP

No cabe duda que se enfrentará a situaciones en las que desee quitar la definición de una vista de su base de datos. La sintaxis para hacerlo es bastante simple:

DROP VIEW

Cuando se ejecuta la instrucción DROP VIEW, la definición de la vista se quita; sin embargo, ninguno de los datos fundamentales (que se almacenan en las tablas base) se afectan. Una vez que la vista se elimina, se puede volver a crear la vista o crear una vista diferente con el mismo nombre. Ahora veamos un ejemplo rápido:

DROP VIEW COM_EMP;

Esta instrucción elimina la vista COM_EMP de la base de datos, pero deja los datos fundamentales intactos.

9.4 PASO A PASO: VISTAS

  1. Abra la aplicación de cliente de su RDBMS y conéctese a la base de datos INVENTARIO.

  2. La primera vista que se crea se llama CD_EN_EXISTENCIA. La vista se basa en las columnas TITULO_CD y EN_EXISTENCIA en la tabla DISCOS_COMPACTOS. Se desea que la vista incluya sólo las filas cuyos valores en la columna EN_EXISTENCIA sean mayores que 10. La vista utilizará los mismos nombres de columna que la tabla e incluirá la cláusula WITH CHECK OPTION para evitar que los valores inferiores o iguales a 10 se añadan a la columna EN_EXISTENCIA. Introduzca y ejecute la siguiente instrucción SQL:

CREATE VIEW CDS_EN_EXISTENCIA AS

SELECT TITULO_CD, EN_EXISTENCIA

FROM DISCOS_COMPACTOS

WHERE EN_EXISTENCIA > 10 WITH CHECK OPTION;

  1. Después se crea la vista llamada EDITORES_CD, que contiene las columnas TITULO_CD y EDITOR. La vista se basa en la columna TITULO_CD de la tabla DISCOS_COMPACTOS y en la columna NOMBRE_COMPAÑIA de la tabla DISQUERAS_CD. Tendrá que utilizar la cláusula WHERE para que coincidan las filas en las dos tablas. La cláusula WHERE también va a limitar las filas incluidas en la vista a aquellas cuyo valor ID_DISQUERA en la tabla DISQUERAS_CD sea 5403 o 5402. Introduzca y ejecute la siguiente instrucción SQL:

CREATE VIEW EDITORES_CD

( TITULO_CD, EDITOR ) AS

SELECT DISCOS_COMPACTOS.TITULO_CD, DISQUERAS_CD.NOMBRE_COMPAÑIA FROM DISCOS_COMPACTOS, DISQUERAS_CD WHERE DISCOS_COMPACTOS.ID_DISQUERA = DISQUERAS_CD.ID_DISQUERA AND DISQUERAS_CD.ID_DISQUERA = 5403 OR DISQUERAS_CD.ID_DISQUERA = 5402;

  1. Decide que no desea limitar las filas a valores específicos en la columna ID_DISQUERA, así que debe eliminar la definición de la vista de la base de datos y volver a crear la vista sin las restricciones en los valores. Introduzca y ejecute la siguiente instrucción SQL:

DROP VIEW EDITORES_CD;

Ahora se puede volver a crear la vista EDITORES_CD. Introduzca y ejecute la siguiente instrucción SQL:

::: {.infobox .caution data-latex=“{caution}”} CREATE VIEW EDITORES_CD ( TITULO_CD, EDITOR ) AS

SELECT DISCOS_COMPACTOS.TITULO_CD, DISQUERAS_CD.NOMBRE_COMPAÑIA FROM DISCOS_COMPACTOS, DISQUERAS_CD WHERE DISCOS_COMPACTOS.ID_DISQUERA = DISQUERAS_CD.ID_DISQUERA;

  1. Cierre la aplicación de cliente.

:::

Al momento de terminar el ejercicio, puede sentirse libre de continuar con su muy feliz vida.