Aprende SQL

Vistas: CREATE VIEW

Una vista es una consulta SELECT guardada con un nombre. Funciona como una tabla virtual: no almacena datos por sí misma, sino que ejecuta la consulta cada vez que la usas.

Consulta compleja
SELECT v.title, d.name, d.country
FROM videogames v
JOIN developers d
ON v.developer_id = d.id
WHERE v.year > 2010;
CREATE VIEW
Vista guardada
juegos_modernos
SELECT * FROM juegos_modernos;

Crear una vista

CREATE VIEW nombre_vista AS
SELECT columnas
FROM tabla
WHERE condición;

Por ejemplo, para crear una vista con los juegos modernos (posteriores a 2010):

CREATE VIEW juegos_modernos AS
SELECT title, developer, year, playtime_hours
FROM videogames
WHERE year > 2010;

Una vez creada, puedes usarla exactamente como si fuera una tabla:

SELECT * FROM juegos_modernos;
SELECT title FROM juegos_modernos WHERE playtime_hours > 50;

¿Para qué sirven las vistas?

  • Simplificar consultas complejas: en vez de repetir un JOIN de 5 tablas cada vez, creas una vista y la consultas con un simple SELECT.
  • Reutilizar lógica: si varias partes de tu aplicación necesitan los mismos datos filtrados, la vista centraliza esa lógica.
  • Seguridad: puedes dar acceso a una vista sin exponer la tabla completa. Por ejemplo, una vista sin la columna de salario.
  • Legibilidad: un nombre descriptivo como ventas_ultimo_mes es más claro que la consulta entera.

Vistas con JOINs

Las vistas pueden contener cualquier consulta, incluyendo JOINs:

CREATE VIEW catalogo AS
SELECT v.title, d.name AS developer, d.country, v.year
FROM videogames v
JOIN developers d ON v.developer_id = d.id;

Ahora puedes hacer:

SELECT * FROM catalogo WHERE country = 'Japón';

Eliminar una vista

DROP VIEW nombre_vista;

O de forma segura:

DROP VIEW IF EXISTS nombre_vista;

Eliminar una vista no afecta a los datos de las tablas originales, ya que la vista no almacena datos.

IF NOT EXISTS

Para evitar errores si la vista ya existe:

CREATE VIEW IF NOT EXISTS nombre_vista AS
SELECT ...;

Limitaciones en SQLite

  • SQLite no soporta CREATE OR REPLACE VIEW. Si necesitas modificar una vista, debes eliminarla primero con DROP VIEW y volver a crearla.
  • Las vistas son de solo lectura en SQLite: no puedes hacer INSERT, UPDATE o DELETE directamente sobre una vista.

Nuestras tablas

Nombre de la Tabla: developers
idnamecountryfounded_year
1NintendoJapón1889
2Square EnixJapón1975
3CD Projekt RedPolonia1994
4Mojang StudiosSuecia2009
5Rockstar GamesEstados Unidos1998
6FromSoftwareJapón1986
7ValveEstados Unidos1996
8Naughty DogEstados Unidos1984
9BungieEstados Unidos1991
10Santa Monica StudioEstados Unidos1999
Nombre de la Tabla: videogames
idtitledeveloper_idyearplaytime_hours
1The Legend of Zelda1198620
2Super Mario Bros.1198510
3Final Fantasy VII2199740
4The Witcher 332015100
5Minecraft420119999
6Grand Theft Auto V5201380
7Dark Souls6201160
8Portal 2720118
9Red Dead Redemption 25201870
10The Last of Us8201315
11Halo: Combat Evolved9200110
12God of War10201825

Ejercicios