🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

Lesión 9.4 · Tiempo de lectura: ~8 minutos

Esta lección introduce las vistas (VIEW), objetos SQL que te permiten guardar una consulta bajo un nombre y luego usarla como si fuera una tabla regular. Aprenderás cómo crear vistas, cómo difieren de las tablas y tablas temporales, y en qué tareas son especialmente útiles. Al final de esta lección, podrás usar vistas con confianza para simplificar consultas complejas y reutilizar lógica.

Vistas (VIEW) en SQL

En la lección anterior, hablamos sobre tablas temporales, que ayudan a almacenar resultados intermedios durante una sesión. Ahora veamos otra herramienta SQL importante: vistas. También ayudan a simplificar el trabajo con consultas complejas, pero lo hacen de una manera diferente.

Una vista te permite guardar una consulta SELECT bajo un nombre separado y luego reutilizarla más tarde. Esto es especialmente útil en informes, análisis y escenarios donde el mismo conjunto de resultados necesita ser leído muchas veces.

Vistas SQL

¿Qué es una Vista?

Una vista (VIEW) es un objeto de base de datos que no almacena los datos en sí, sino la consulta SQL utilizada para recuperarlos.

En términos más simples, se puede pensar en una vista como una “tabla virtual”:

  • tiene un nombre;
  • se puede consultar con SELECT;
  • generalmente muestra datos de una o más tablas;
  • ayuda a ocultar la lógica de consulta compleja detrás de una interfaz más simple.

Cuando consultas una vista, el SGBD generalmente ejecuta la consulta almacenada y devuelve el resultado actual basado en las tablas subyacentes.

Sintaxis Básica

Una vista se crea con CREATE VIEW:

CREATE VIEW view_name AS
SELECT column1, column2, column3
FROM table_name
WHERE condition;

Después de eso, puedes consultar la vista casi como una tabla:

SELECT *
FROM view_name;

Es importante entender que una vista regular almacena la lógica de consulta, no una copia separada del resultado.

Si una vista ya no es necesaria, puedes eliminarla con DROP VIEW:

DROP VIEW view_name;

En muchos SGBD, una opción más segura es DROP VIEW IF EXISTS view_name;, que elimina el objeto solo cuando existe y ayuda a evitar errores en scripts de implementación.

Ejemplo: Creando una Vista

Supongamos que a menudo queremos obtener una lista de clientes junto con el monto total de sus pagos. En lugar de escribir la misma consulta cada vez, podemos crear una vista:

CREATE VIEW customer_payment_summary AS
SELECT c.customer_id,
       c.first_name,
       c.last_name,
       SUM(p.amount) AS total_amount,
       COUNT(p.payment_id) AS payment_count
FROM customer c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name;

Ahora esta lógica es mucho más fácil de usar:

SELECT customer_id, first_name, last_name, total_amount
FROM customer_payment_summary
ORDER BY total_amount DESC;

SELECT AVG(total_amount) AS avg_customer_revenue
FROM customer_payment_summary;

Resultado: la agregación compleja se define una vez dentro de la vista, y después de eso puedes trabajar con ella como con un conjunto de datos regular en varias consultas separadas.


Cómo se Diferencia una Vista de una Tabla Regular

Aunque una vista a menudo se parece a una tabla, hay diferencias importantes entre ellas.

1. Almacenamiento de Datos

  • Una tabla regular almacena datos físicamente.
  • Una vista generalmente almacena solo la consulta SQL.

2. Fuente de Resultados

  • Una tabla regular contiene sus propias filas.
  • Una vista muestra datos obtenidos de otras tablas o incluso de otras vistas.

3. Frescura de Datos

  • Una tabla regular cambia solo después de INSERT, UPDATE o DELETE.
  • Una vista generalmente muestra el estado actual de las tablas subyacentes en el momento de la consulta.

4. Propósito

  • Una tabla regular se utiliza para almacenar datos de negocio.
  • Una vista se utiliza para simplificar la lectura, reutilización y organización lógica de consultas.

5. Modificación de Datos

  • Una tabla regular está destinada directamente a insertar, actualizar y eliminar filas.
  • Una vista puede en algunos casos también soportar la modificación de datos, pero eso depende del SGBD específico y de cuán compleja sea la consulta dentro de la VIEW.

Cuándo Son Especialmente Útiles las Vistas

Las vistas valen la pena usar si:

  • la misma consulta tiene que repetirse muchas veces;
  • quieres ocultar JOINs complejos, filtros y agregaciones detrás de un nombre más simple;
  • quieres dar acceso a usuarios o informes no a una tabla completa, sino solo a las columnas y filas necesarias;
  • quieres hacer que SQL analítico sea más fácil de leer y mantener.

Por ejemplo, puedes crear una vista solo para películas caras:

CREATE VIEW expensive_films AS
SELECT film_id, title, rental_rate, rating
FROM film
WHERE rental_rate >= 4.00;

SELECT title, rental_rate
FROM expensive_films
ORDER BY rental_rate DESC, title;

Resultado: la lógica de filtrado principal se guarda en un solo lugar, por lo que en consultas posteriores no necesitas repetir la condición WHERE rental_rate >= 4.00 cada vez.


Vista vs. Tabla Temporal

Las vistas y las tablas temporales pueden resolver tareas similares, pero hay diferencias importantes entre ellas.

  • Una tabla temporal generalmente existe por un tiempo limitado y almacena datos intermedios por separado.
  • Una vista es generalmente un objeto de esquema permanente y almacena solo la consulta.
  • Una tabla temporal es conveniente cuando necesitas mantener físicamente un resultado intermedio durante varios pasos.
  • Una vista es conveniente cuando necesitas reutilizar la misma lógica de selección muchas veces.
  • Una tabla temporal se utiliza más a menudo dentro de un flujo de trabajo de procesamiento de datos.
  • Una vista se utiliza más a menudo como una capa de acceso nombrada conveniente sobre los datos.

Si necesitas un resultado intermedio que debe existir por separado y puede ser procesado más adelante, una tabla temporal es a menudo la mejor opción. Si simplemente necesitas definir una representación conveniente sobre datos existentes una vez, VIEW suele ser una mejor opción.


¿Puedes Modificar Datos a Través de una Vista?

En muchos SGBD, las vistas simples pueden ser utilizadas no solo para leer, sino también para modificar datos. Por ejemplo, esto puede ser posible si la vista se basa en una sola tabla y no contiene agregados complejos, GROUP BY, DISTINCT o uniones entre varias tablas.

Por ejemplo, una vista simple puede verse así:

CREATE VIEW active_customers_basic AS
SELECT customer_id, first_name, last_name, active
FROM customer
WHERE active = 1;

En algunos SGBD, puedes ejecutar UPDATE a través de tal vista. Pero no debes confiar en esto como una regla universal: cuanto más compleja sea la lógica de la vista, menos probable es que sea actualizable.

En la práctica, las vistas se utilizan más a menudo para leer y simplificar consultas.


Qué Tener en Cuenta

Al trabajar con vistas, es útil tener en cuenta varias reglas:

  • da a las vistas nombres claros que reflejen su significado;
  • no ocultes demasiada lógica dentro de una sola vista si eso dificulta su lectura;
  • recuerda que el rendimiento de la consulta contra una vista depende de la consulta dentro de ella y de las tablas subyacentes;
  • no asumas automáticamente que cualquier vista soporta INSERT, UPDATE o DELETE;
  • verifica si un simple SELECT, un CTE o una tabla temporal serían más simples en una tarea particular;
  • considera características específicas del SGBD como CREATE OR REPLACE VIEW o reglas de actualizabilidad de vistas.

Una vista bien diseñada hace que SQL sea más corto, claro y fácil de reutilizar.


Ejemplo Práctico

Imagina que los analistas necesitan regularmente una lista de películas junto con sus nombres de categoría. En lugar de escribir los mismos JOINs cada vez, puedes crear una vista:

CREATE VIEW film_category_details AS
SELECT f.film_id,
       f.title,
       f.rental_rate,
       c.name AS category_name
FROM film f
JOIN film_category fc ON f.film_id = fc.film_id
JOIN category c ON fc.category_id = c.category_id;

Después de eso, cualquier consulta se vuelve más simple:

SELECT title, category_name, rental_rate
FROM film_category_details
WHERE category_name = 'Comedy'
ORDER BY rental_rate DESC, title;

SELECT category_name, COUNT(*) AS film_count
FROM film_category_details
GROUP BY category_name
ORDER BY film_count DESC;

Este enfoque es conveniente porque la compleja relación de tablas se define una vez. Después de eso, los analistas, informes y aplicaciones pueden usar una capa lógica lista sin repetir constantemente la misma lógica de JOIN.


Preguntas Frecuentes

¿Una vista almacena datos o solo la consulta?

En una implementación estándar, una VIEW almacena solo la definición SQL, no una copia separada de las filas. Cuando se consulta, el SGBD construye el resultado a partir de las tablas subyacentes.

¿Cuándo debería elegir una vista en lugar de una tabla temporal?

Una VIEW es mejor cuando necesitas reutilizar la misma lógica de lectura muchas veces. Una tabla temporal es mejor cuando necesitas persistir físicamente un resultado intermedio a través de varios pasos de procesamiento.

¿Pueden las vistas mejorar el rendimiento por sí solas?

No automáticamente. El rendimiento depende de la consulta dentro de la VIEW, la indexación en las tablas fuente y el plan de ejecución.


Preguntas de Entrevista

¿Qué es una vista SQL y cómo funciona?

Una vista es una consulta SQL nombrada guardada como un objeto de esquema. Cuando ejecutas SELECT contra ella, el SGBD ejecuta la definición almacenada y devuelve un resultado de tabla virtual.

¿Cómo se diferencia una vista de una tabla regular?

Una tabla regular almacena datos físicamente. Una vista generalmente almacena solo la lógica de consulta y se utiliza para simplificar el acceso y reutilizar patrones de consulta complejos.

¿Cuándo puede ser actualizable una vista?

Generalmente cuando es una vista simple sobre una sola tabla sin GROUP BY, agregados, DISTINCT o uniones complejas. Las reglas exactas dependen del SGBD.


Conclusiones clave de esta lección:

  • Una vista (VIEW) almacena una consulta SQL en lugar de una copia separada de los datos.
  • Puedes consultar una vista como una tabla, lo que simplifica la reutilización de lógica compleja.
  • Las vistas son especialmente útiles para informes, análisis y ocultar JOINs y filtros complejos.
  • A diferencia de las tablas temporales, las vistas son generalmente objetos de esquema permanentes y no están destinadas a almacenar datos intermedios.
  • No todas las vistas soportan la modificación de datos, y eso depende del SGBD específico y de la estructura de la consulta.
  • El rendimiento de la vista depende de cuán eficientemente esté escrita la consulta dentro de ella.

En la próxima lección, veremos las vistas materializadas y entenderemos cómo se diferencian de las vistas regulares.