Una vista permite guardar una consulta con un nombre y consultarla después como si fuera una tabla virtual.
¿Qué problema resuelve una vista?
Si una consulta compleja se repite en distintos reportes, podemos centralizarla y reutilizarla.
Una vista no es una copia de la tabla
Una vista guarda la definición de una consulta. Cuando la consultamos, MySQL vuelve a ejecutar esa lógica sobre las tablas originales.
Eso significa que, si cambian los datos de las tablas base, el resultado de la vista también cambia.
CREATE VIEW
CREATE VIEW vista_alumnos_cursos AS SELECT a.id, a.nombre, a.apellido, c.nombre AS curso FROM alumnos AS a LEFT JOIN cursos AS c ON a.curso_id = c.id;
La vista guarda la definición de la consulta.
Desde ese momento podemos usar vista_alumnos_cursos en SELECT como si fuera una tabla, aunque realmente dependa de alumnos y cursos.
Consultar una vista
SELECT * FROM vista_alumnos_cursos;
¿Por qué simplifica el trabajo?
Sin la vista, cada reporte debería repetir el JOIN completo. Con la vista, el consumidor solo necesita consultar una estructura ya preparada.
Esto ayuda a evitar duplicación de SQL y reduce el riesgo de que distintos reportes implementen la misma lógica de manera diferente.
Filtrar una vista
SELECT * FROM vista_alumnos_cursos WHERE curso = 'Programación';
Filtrar al consultar vs filtrar dentro de la vista
Podemos crear una vista general y aplicar WHERE cada vez, o crear una vista que ya represente un subconjunto concreto.
La segunda opción puede ser útil cuando esa regla se reutiliza constantemente.
Vista con filtros incorporados
CREATE VIEW alumnos_activos AS SELECT id, nombre, apellido, email FROM alumnos WHERE activo = TRUE;
Vista con agregaciones
CREATE VIEW resumen_cursos AS SELECT c.id, c.nombre, COUNT(a.id) AS cantidad_alumnos FROM cursos AS c LEFT JOIN alumnos AS a ON c.id = a.curso_id GROUP BY c.id, c.nombre;
CREATE OR REPLACE VIEW
Reemplaza la definición de una vista existente.
CREATE OR REPLACE VIEW alumnos_activos AS SELECT id, nombre, apellido, email, fecha_ingreso FROM alumnos WHERE activo = TRUE;
ALTER VIEW
Otra forma de modificar la definición.
DROP VIEW
DROP VIEW IF EXISTS alumnos_activos;
Dependencias de una vista
Como la vista depende de tablas y columnas concretas, ciertos cambios estructurales en esas tablas pueden romperla. Por ejemplo, eliminar una columna utilizada por la vista obliga a revisar su definición.
¿Una vista guarda datos?
Una vista tradicional normalmente no almacena una copia independiente de las filas: consulta las tablas originales.
Vistas y seguridad
Podemos exponer solo ciertas columnas y ocultar información sensible.
Por ejemplo, una vista pública de clientes podría mostrar nombre y ciudad, pero excluir documento, teléfono o email.
Esto no reemplaza una política de permisos correcta, pero puede formar parte de ella.
¿Se puede hacer INSERT o UPDATE sobre una vista?
Algunas vistas simples son actualizables. Las que incluyen agregaciones, GROUP BY, DISTINCT o lógica compleja pueden no serlo.
Antes de tratar una vista como si fuera una tabla editable conviene verificar sus características. Una vista de reporte suele pensarse principalmente para lectura.
WITH CHECK OPTION
Evita que una modificación realizada a través de la vista haga que el registro deje de cumplir la condición de esa vista.
CREATE VIEW alumnos_activos AS SELECT * FROM alumnos WHERE activo = TRUE WITH CHECK OPTION;
Vistas y rendimiento
Una vista no acelera automáticamente una consulta. El rendimiento sigue dependiendo de índices, joins, filtros y plan de ejecución.
Errores comunes
- crear vistas para consultas que no se reutilizan;
- suponer que almacenan una copia independiente;
- actualizar vistas complejas sin verificar si son actualizables;
- crear demasiadas capas de vistas.
Ejercicios
- crear vista de alumnos activos;
- crear vista alumnos+cursos;
- crear resumen por curso;
- modificar una vista;
- crear una vista que oculte columnas sensibles.
¿Qué sigue?
Procedimientos almacenados.
¿Te sirvió esta guía? ☕
Si este contenido te ayudó y querés apoyar a Club Programador para seguir publicando ejercicios, proyectos y guías gratuitas, podés colaborar mediante:
Ruta SQL / MySQL
Ver todos los contenidos de SQL / MySQL
Descubre más desde Club Programador
Suscríbete y recibe las últimas entradas en tu correo electrónico.
2 opiniones en “Vistas en SQL: CREATE VIEW, cómo usarlas y cuándo convienen”