🎯 Quedan pocos días este mes Apoya SQLTest.online y ayúdanos a mantener la práctica de SQL gratuita para todos. Dona hoy →
Código SQL copiado al portapapeles

Vistas (VIEW) en SQL

Lección 9.5 · Tiempo de lectura: ~8 min · Tareas de práctica ↓

Esta lección presenta las vistas (VIEW), objetos SQL que permiten guardar una consulta con un nombre y usarla después como si fuera una tabla normal. Aprenderás a crear vistas, en qué se diferencian de las tablas y de las tablas temporales, y en qué tareas resultan especialmente útiles. Al terminar, podrás usar vistas con seguridad para simplificar consultas complejas y reutilizar lógica.

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

Una vista permite guardar una consulta SELECT con un nombre propio y reutilizarla más adelante. Es especialmente útil en informes, analítica y casos en los que hay que leer el mismo conjunto de resultados muchas veces.

Vistas SQL

Qué es una vista

Una vista (VIEW) es un objeto de la base de datos que no guarda los datos en sí, sino la consulta SQL que se usa para obtenerlos.

Dicho de forma más sencilla, una vista puede verse como una "tabla virtual":

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

Cuando consultas una vista, el SGBD normalmente ejecuta la consulta guardada y devuelve el resultado actual a partir de 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 puedes consultar la vista casi como una tabla:

SELECT *
FROM view_name;

Es importante entender que una vista normal guarda la lógica de la consulta, no una copia aparte del resultado.

Si una vista ya no se necesita, 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 si existe y ayuda a evitar errores en los scripts de despliegue.

Ejemplo: crear una vista

Supongamos que a menudo queremos obtener la lista de clientes junto con el importe 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 es mucho más fácil usar esta lógica:

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 sola vez dentro de la vista y, a partir de ahí, puedes trabajar con ella como con un conjunto de datos normal en varias consultas distintas.


En qué se diferencia una vista de una tabla normal

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

1. Almacenamiento de datos

  • Una tabla normal guarda los datos físicamente.
  • Una vista normalmente solo guarda la consulta SQL.

2. Origen del resultado

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

3. Actualidad de los datos

  • Una tabla normal cambia solo tras un INSERT, UPDATE o DELETE.
  • Una vista normalmente muestra el estado actual de las tablas subyacentes en el momento de la consulta.

4. Finalidad

  • Una tabla normal sirve para guardar los datos del negocio.
  • Una vista sirve para simplificar la lectura, reutilizar y organizar lógicamente las consultas.

5. Modificación de datos

  • Una tabla normal está pensada directamente para insertar, actualizar y eliminar filas.
  • Una vista en algunos casos también permite modificar datos, pero eso depende del SGBD concreto y de lo compleja que sea la consulta dentro de la VIEW.

Cuándo las vistas son especialmente útiles

Conviene usar vistas si:

  • hay que repetir la misma consulta muchas veces;
  • quieres ocultar JOIN, filtros y agregaciones complejos tras un nombre más sencillo;
  • quieres dar a los usuarios o a los informes acceso no a una tabla completa, sino solo a las columnas y filas necesarias;
  • quieres que el SQL analítico sea más fácil de leer y mantener.

Por ejemplo, puedes crear una vista solo para las 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, así que en las consultas posteriores no hace falta repetir cada vez la condición WHERE rental_rate >= 4.00.


Vista frente a tabla temporal

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

  • Una tabla temporal suele existir durante un tiempo limitado y guarda los datos intermedios por separado.
  • Una vista suele ser un objeto permanente del esquema y solo guarda la consulta.
  • Una tabla temporal es cómoda cuando necesitas conservar físicamente un resultado intermedio durante varios pasos.
  • Una vista es cómoda cuando necesitas reutilizar muchas veces la misma lógica de selección.
  • Una tabla temporal se usa más a menudo dentro de un proceso de tratamiento de datos.
  • Una vista se usa más a menudo como una capa de acceso a los datos cómoda y con nombre.

Si necesitas un resultado intermedio que exista por separado y que tal vez se siga procesando, una tabla temporal suele ser la mejor opción. Si simplemente necesitas definir una vez una representación cómoda sobre datos existentes, VIEW suele encajar mejor.


¿Se pueden modificar datos a través de una vista?

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

Por ejemplo, una vista sencilla puede tener este aspecto:

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 una vista así. Pero no conviene tomarlo como una regla universal: cuanto más compleja es la lógica de la vista, menos probable es que sea actualizable.

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


A qué prestar atención

Al trabajar con vistas, conviene tener en cuenta varias reglas:

  • da a las vistas nombres claros que reflejen su significado;
  • no escondas demasiada lógica en una sola vista si eso la hace difícil de leer;
  • recuerda que el rendimiento de una consulta sobre una vista depende de la consulta que contiene y de las tablas subyacentes;
  • no des por hecho que cualquier vista admite INSERT, UPDATE o DELETE;
  • comprueba si en una tarea concreta sería más sencillo un SELECT normal, una CTE o una tabla temporal;
  • ten en cuenta las particularidades de cada SGBD, como CREATE OR REPLACE VIEW o las reglas para actualizar vistas.

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


Ejemplo práctico

Imagina que los analistas necesitan con frecuencia una lista de películas junto con los nombres de sus categorías. En lugar de escribir los mismos JOIN 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, cualquier consulta se vuelve más sencilla:

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 cómodo porque la relación compleja entre tablas se define una sola vez. A partir de ahí, analistas, informes y aplicaciones pueden usar una capa lógica ya preparada sin repetir constantemente la misma lógica de JOIN.


Preguntas frecuentes

¿Una vista guarda datos o solo la consulta?

En una implementación estándar, una VIEW solo guarda la definición SQL, no una copia aparte de las filas. Al consultarla, el SGBD construye el resultado a partir de las tablas subyacentes.

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

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

¿Las vistas mejoran el rendimiento por sí solas?

No de forma automática. El rendimiento depende de la consulta dentro de la VIEW, de los índices de las tablas de origen y del plan de ejecución.


Preguntas de entrevista

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

Una vista es una consulta SQL con nombre guardada como objeto del esquema. Cuando ejecutas un SELECT sobre ella, el SGBD ejecuta la definición guardada y devuelve el resultado como una tabla virtual.

¿En qué se diferencia una vista de una tabla normal?

Una tabla normal guarda los datos físicamente. Una vista normalmente solo guarda la lógica de una consulta y se usa para simplificar el acceso y reutilizar patrones de consulta complejos.

¿Cuándo puede ser actualizable una vista?

Normalmente cuando es una vista sencilla sobre una sola tabla, sin GROUP BY, agregados, DISTINCT ni uniones complejas. Las reglas exactas dependen del SGBD.


Puntos clave de esta lección:

  • Una vista (VIEW) guarda una consulta SQL y no una copia aparte 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 en informes, analítica y para ocultar JOIN y filtros complejos.
  • A diferencia de las tablas temporales, las vistas suelen ser objetos permanentes del esquema y no están pensadas para guardar datos intermedios.
  • No todas las vistas admiten la modificación de datos, y eso depende del SGBD concreto y de la estructura de la consulta.
  • El rendimiento de una vista depende de lo eficiente que sea la consulta que contiene.

Intenta resolver las siguientes tareas para reforzar lo que aprendiste en esta lección.

  1. Vista de Distribución de Pingüinos
  2. Eliminar Vista de la Base de Datos
  3. ¿Qué es una vista en RDBMS?
  4. Crear Vista de Dirección del Cliente
  5. Vista de Promedios de Pingüinos