Vistas en SQL: CREATE VIEW, cómo usarlas y cuándo convienen


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

  1. crear vista de alumnos activos;
  2. crear vista alumnos+cursos;
  3. crear resumen por curso;
  4. modificar una vista;
  5. 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:

☕ Apoyar con Mercado Pago

🌎 Apoyar con PayPal


Ruta SQL / MySQL

Ver todos los contenidos de SQL / MySQL

← Índices en MySQL

Procedimientos almacenados →


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”

Deja un comentario

Descubre más desde Club Programador

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo