Vista (base de datos)
En una base de datos, una vista es el conjunto de resultados de una consulta almacenada en los datos. es una consulta que se presenta como una tabla (virtual) a partir de un conjunto de tablas en una base de datos relacional.
Las vistas tienen la misma estructura que una tabla: filas y columnas. La única diferencia es que sólo se almacena de ellas la definición, no los datos. Los datos que se recuperan mediante una consulta a una vista se presentarán igual que los de una tabla. De hecho, si no se sabe que se está trabajando con una vista, nada hace suponer que es así. Al igual que sucede con una tabla, se pueden insertar, actualizar, borrar y seleccionar datos en una vista. Aunque siempre es posible seleccionar datos de una vista, en algunas condiciones existen restricciones para realizar el resto de las operaciones sobre vistas.
Una vista se especifica a través de una expresión de consulta (una sentencia SELECT) que la calcula y que puede realizarse sobre una o más tablas. Sobre un conjunto de tablas relacionales se puede trabajar con un número cualquiera de vistas.
La mayoría de los SGBD soportan la creación y manipulación de vistas. Las vistas se crean cuando se necesitan hacer varias sentencias para devolver una tabla final.
Equivalencia
Una vista es equivalente a su consulta de origen. Cuando las consultas se ejecutan en vistas, la consulta se modifica. Por ejemplo, si existe una vista llamada accounts_view con el contenido de la siguiente manera:
accounts_view: ------------- SELECT name, money_received, money_sent, (money_received - money_sent) AS balance, address, ... FROM table_customers c JOIN accounts_table a ON a.customer_id = c.customer_id
Entonces la aplicación podría ejecutar una consulta simple como:
Simple query ------------ SELECT name, balance FROM accounts_view
Luego, el RDBMS toma la consulta simple, reemplaza la vista equivalente y luego envía lo siguiente al optimizador de consultas:
Preprocessed query: ------------------ SELECT name, balance FROM (SELECT name, money_received, money_sent, (money_received - money_sent) AS balance, address, ... FROM table_customers c JOIN accounts_table a ON a.customer_id = c.customer_id )
Luego, el optimizador elimina los campos innecesarios y la complejidad (por ejemplo: no es necesario leer la dirección, ya que la invocación principal no la utiliza) y luego envía la consulta al motor SQL para su procesamiento.