Creación de Vistas
Volviendo al ejemplo del tema anterior, si tenemos una base de datos que almacena datos de alumnos, materias y examenes, en la que una consulta recurrente es la del último ejemplo visto: obtener el promedio de calificaciones de los alumnos inscriptos en “Filosofía”. La cuál vimos que era relativamente compleja.
1SELECT a.id_alumno AS id_alumno, a.nombre AS nombre, a.apellido AS apellido, AVG(er.calificacion) AS promedio2FROM alumnos a3INNER JOIN inscripciones i ON a.id_alumno = i.id_alumno4INNER JOIN examenes_rendidos er ON er.id_alumno = a.id_alumno5INNER JOIN examenes e ON er.id_examen = e.id_examen6INNER JOIN materias m ON m.id_materia = e.id_materia7WHERE m.nombre = "Filosofía"8GROUP BY a.id_alumno, a.nombre, a.apellido;
Podemos crear una Vista con esta consulta. Un nombre para ella podría ser: promedios_filosofia
.
Sentencia CREATE VIEW
Para crear una Vista, utilizando solo SQL, debemos emplear la sentencia CREATE VIEW
, la cual implementa, en su forma más simple, la siguiente sintaxis:
1CREATE VIEW <nombre_vista>2AS <sentencia_select>;
Usando el ejemplo anterior:
1USE instituto;2
3CREATE VIEW promedios_filosofia4AS5 SELECT a.id_alumno AS id_alumno, a.nombre AS nombre, a.apellido AS apellido, AVG(er.calificacion) AS promedio6 FROM alumnos a7 INNER JOIN inscripciones i ON a.id_alumno = i.id_alumno8 INNER JOIN examenes_rendidos er ON er.id_alumno = a.id_alumno9 INNER JOIN examenes e ON er.id_examen = e.id_examen10 INNER JOIN materias m ON m.id_materia = e.id_materia11 WHERE m.nombre = "Filosofía"12 GROUP BY a.id_alumno, a.nombre, a.apellido13;
En primer lugar, debemos estar usando la base de datos en donde se encuentren las tablas subyacentes que queramos usar, en este caso la base de datos se llama instituto
.
Luego, podemos ejecutar la sentencia CREATE VIEW
indicando el nombre y sentencia antes mencionados.
De esta manera, la Vista queda formada comimgo una tabla virtual, que se generará dinámicamente al ejecutar la consulta, y que tiene como columnas id_alumno
, nombre
, apellido
y promedio
. Al consultarla, devolverá solo los registros de aquellos inscriptos en “Filosofía”.
Crear una Vista usando MySQL Workbench
También podemos crear Vistas directamente desde la GUI de MySQL Workbench. Para ello debemos hacer clic derecho en la sección “Views” de la base de datos activa y seleccionar la opción “Create View”.
Fig. 2.2
Esto abrirá una pestaña de creación de la Vista en el área de consultas donde tendremos que escribir tanto el nombre como el contenido de la consulta.
Fig. 2.3
El nombre de la Vista se va a generar por defecto como new_view
, así que debemos cambiarlo manualmente, directamente en la sentencia (no es posible modificar el cuadro de texto superior). Luego, debemos escribir la consulta después de la palabra clave AS
.
Escribiendo la sentencia mencionada anteriormente, quedaría de la siguiente forma.
Fig. 2.4
Finalmente, tendremos que aplicar los cambios con el botón “Apply”, lo que nos mostrará la consulta, añadiendo una sentencia USE
previamente, y el modificador OR REPLACE
a la sentencia CREATE
para que, en caso de que ya exista, se sobreescribe, en lugar de lanzar un error.
En esta instancia todavía podemos modificar la consulta. De otra forma, podemos aplicar los cambios con el botón “Apply”.
Fig. 2.5
Si la creación se ejecuta sin errores, en la siguiente ventana veremos un mensaje de éxito. En caso contrario, veremos un mensaje de error explicando qué falló en la ejecución.
Finalmente, después de la creación exitosa, podremos ver que, bajo la sección de Vistas “Views” figurará la nueva Vista creada con el nombre que le asignamos previamente (es posible que debamos refrescar los datos de la sección Schemas).
Fig. 2.6
Si hacemos clic en el botón con la llave de tuercas podremos ver nuevamente la sentencia, permitiéndonos inspeccionarla y editarla si lo deseamos.
Fig. 2.7
Además veremos que la sentencia se ha modificado en estructura y sintaxis para adherir al estándar de MySQL. Por ejemplo, los nombres de tablas y campos se escriben entre comillas invertidas (`
), se agregan alias si hace falta y se incluye una configuración mínima al inicio (entre CREATE
y VIEW
).
Modificar la definición de una Vista
Si decidimos editar la definición de la Vista (en Workbench) en la ventana antes mostrada, simplemente tenemos que aplicar los cambios al igual que lo hicimos al momento de crearla. Ya que, al generarse la sentencia de creación, también se agregará el modificador OR REPLACE
a la sentencia CREATE
(como podemos ver en la Fig. 2.5), por lo tanto, se sobreescribirá la Vista existente cuando la ejecutemos.
Por otro lado, también existe la sentencia ALTER VIEW
para modificar una Vista existente, cuya sintaxis es casi idéntica a la de CREATE VIEW
:
1ALTER VIEW <nombre_vista>2AS <sentencia_select>;
La diferencia entre esta sentencia y usar CREATE OR REPLACE VIEW
es que, en esta última, la Vista puede o no existir previamente y MySQL creará o reemplazará la Vista según corresponda. Por otro lado, ALTER VIEW
requiere de la existencia de la Vista nombrada, de otro modo lanzará un error.