Contenido de esta guía
Qué es una vista
Una VIEW es una consulta guardada con un nombre. Después de crearla, puedes escribir ese nombre en FROM igual que escribirías el nombre de una tabla.
La vista normal no guarda una copia independiente de las filas. Cuando la consultas, el motor obtiene los datos a partir de la consulta que define la vista. Por eso, si cambian las tablas base, el resultado visible también puede cambiar.
Sintaxis básica
CREATE VIEW pedidos_en_curso AS
SELECT id, cliente_id, fecha, total
FROM pedidos
WHERE estado IN ('pendiente', 'enviado');La parte situada después de AS es una consulta normal. La vista conserva su definición, no el resultado concreto que existía al crearla.
Consultar la vista
SELECT id, cliente_id, fecha, total
FROM pedidos_en_curso
ORDER BY id
LIMIT 5;| id | cliente_id | fecha | total |
|---|---|---|---|
| 101 | 1 | 2025-05-02 | 128.4 |
| 102 | 2 | 2025-05-04 | 49.5 |
| 104 | 3 | 2025-05-11 | 179.0 |
| 105 | 4 | 2025-05-15 | 69.9 |
| 106 | 5 | 2025-05-18 | 1088.0 |
La consulta exterior puede añadir su propio filtro, orden o agrupación. La vista simplifica el punto de partida, pero no obliga a mostrar siempre todas sus filas.
Una vista no garantiza un orden. Aunque la consulta que la define parezca devolver las filas de cierta forma, escribe ORDER BY en la consulta final cuando el orden importe.
Error frecuente
Confundir una vista con una copia congelada
Una vista normal no es una fotografía de los datos. Si un pedido cambia de pendiente a cancelado, dejará de aparecer en pedidos_en_curso la próxima vez que consultes la vista.
Las vistas materializadas, disponibles en algunos motores, sí almacenan un resultado y requieren una actualización explícita o programada. Son un objeto distinto.
Comprueba lo aprendido
Crea una vista de productos disponibles
Define una vista llamada productos_disponibles que muestre id, nombre, precio y stock de los productos cuyo stock sea mayor que cero.
CREATE VIEW nombre AS.productos.WHERE stock > 0.Solución razonada
CREATE VIEW productos_disponibles AS
SELECT id, nombre, precio, stock
FROM productos
WHERE stock > 0;La vista guarda la regla «stock mayor que cero». Para ordenar los productos, añade ORDER BY cuando consultes la vista.
Compatibilidad entre motores
PostgreSQL, MySQL, SQLite, SQL Server y Oracle permiten crear vistas, pero difieren en opciones como reemplazo, seguridad, vistas materializadas y actualización de datos. SQLite considera sus vistas de solo lectura para operaciones directas. Un disparador INSTEAD OF puede interceptar un INSERT, UPDATE o DELETE sobre la vista y modificar las tablas base, pero ese mecanismo debe diseñarse de forma explícita y no convierte la vista en actualizable por sí sola. Otros motores admiten cambios mediante ciertas vistas simples o mecanismos específicos. Comprueba siempre las reglas de tu motor antes de modificar datos a través de una vista.
Qué debes recordar
- Una vista pone nombre a una consulta reutilizable.
- Una vista normal no almacena una copia independiente del resultado.
- Las tablas base siguen siendo la fuente de los datos.
- La posibilidad de modificar datos mediante la vista depende del motor y de su definición.