IOKELU
Nivel: Intermedio
💡 Prueba las consultas:
Puedes ejecutar cualquier consulta SQL en nuestra consola interactiva: Abrir consola SQL →

VIEWS en SQL: crea vistas para simplificar consultas complejas

Una VIEW es una tabla virtual basada en una consulta. No almacena datos por sí misma, pero permite reutilizar consultas complejas, mejorar seguridad y simplificar reportes.

1. ¿Qué es una VIEW?

Una VIEW es una tabla virtual basada en una consulta. Se comporta como una tabla, pero sus datos provienen de otras tablas.


CREATE VIEW usuarios_activos AS
SELECT nombre, email
FROM usuarios
WHERE activo = TRUE;
    

2. Crear una VIEW


CREATE VIEW vista_pedidos AS
SELECT u.nombre, p.producto, p.fecha
FROM usuarios u
JOIN pedidos p ON u.id = p.usuario_id;
    

3. Usar una VIEW


SELECT * FROM vista_pedidos;
    

4. Actualizar una VIEW


CREATE OR REPLACE VIEW vista_pedidos AS
SELECT u.nombre, p.producto, p.estado
FROM usuarios u
JOIN pedidos p ON u.id = p.usuario_id;
    

5. Eliminar una VIEW


DROP VIEW vista_pedidos;
    

6. Vistas materializadas

Una vista materializada sí almacena datos y puede refrescarse manual o automáticamente.


CREATE MATERIALIZED VIEW ventas_totales AS
SELECT producto, SUM(precio) AS total
FROM ventas
GROUP BY producto;
    

7. Ejemplos prácticos


CREATE VIEW usuarios_sin_pedidos AS
SELECT u.nombre
FROM usuarios u
LEFT JOIN pedidos p ON u.id = p.usuario_id
WHERE p.id IS NULL;

CREATE VIEW productos_caros AS
SELECT nombre, precio
FROM productos
WHERE precio > 50;

CREATE VIEW resumen_ventas AS
SELECT producto, COUNT(*) AS cantidad
FROM ventas
GROUP BY producto;
    

8. Ejercicios para practicar

9. Mini‑proyecto: Vista de reporte de ventas


CREATE VIEW reporte_ventas AS
SELECT producto, COUNT(*) AS cantidad, SUM(precio) AS total
FROM ventas
GROUP BY producto;
    

10. Errores comunes

11. Preguntas frecuentes

¿Una vista almacena datos?

Las vistas normales no; las materializadas sí.

¿Puedo hacer JOIN dentro de una vista?

Sí, es muy común.


Siguiente guía

SQL Intermedio – Índices →