Saltearse al contenido

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.

1
SELECT a.id_alumno AS id_alumno, a.nombre AS nombre, a.apellido AS apellido, AVG(er.calificacion) AS promedio
2
FROM alumnos a
3
INNER JOIN inscripciones i ON a.id_alumno = i.id_alumno
4
INNER JOIN examenes_rendidos er ON er.id_alumno = a.id_alumno
5
INNER JOIN examenes e ON er.id_examen = e.id_examen
6
INNER JOIN materias m ON m.id_materia = e.id_materia
7
WHERE m.nombre = "Filosofía"
8
GROUP 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:

1
CREATE VIEW <nombre_vista>
2
AS <sentencia_select>;

Usando el ejemplo anterior:

1
USE instituto;
2
3
CREATE VIEW promedios_filosofia
4
AS
5
SELECT a.id_alumno AS id_alumno, a.nombre AS nombre, a.apellido AS apellido, AVG(er.calificacion) AS promedio
6
FROM alumnos a
7
INNER JOIN inscripciones i ON a.id_alumno = i.id_alumno
8
INNER JOIN examenes_rendidos er ON er.id_alumno = a.id_alumno
9
INNER JOIN examenes e ON er.id_examen = e.id_examen
10
INNER JOIN materias m ON m.id_materia = e.id_materia
11
WHERE m.nombre = "Filosofía"
12
GROUP BY a.id_alumno, a.nombre, a.apellido
13
;

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:

1
ALTER VIEW <nombre_vista>
2
AS <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.

Bibliografía

  1. https://dev.mysql.com/doc/refman/8.0/en/create-view.html
  2. https://dev.mysql.com/doc/refman/8.0/en/alter-view.html