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
JOINde 5 tablas cada vez, creas una vista y la consultas con un simpleSELECT. - 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_meses 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 conDROP VIEWy volver a crearla. - Las vistas son de solo lectura en SQLite: no puedes hacer
INSERT,UPDATEoDELETEdirectamente sobre una vista.
Nuestras tablas
Nombre de la Tabla: developers
| id | name | country | founded_year |
|---|---|---|---|
| 1 | Nintendo | Japón | 1889 |
| 2 | Square Enix | Japón | 1975 |
| 3 | CD Projekt Red | Polonia | 1994 |
| 4 | Mojang Studios | Suecia | 2009 |
| 5 | Rockstar Games | Estados Unidos | 1998 |
| 6 | FromSoftware | Japón | 1986 |
| 7 | Valve | Estados Unidos | 1996 |
| 8 | Naughty Dog | Estados Unidos | 1984 |
| 9 | Bungie | Estados Unidos | 1991 |
| 10 | Santa Monica Studio | Estados Unidos | 1999 |
Nombre de la Tabla: videogames
| id | title | developer_id | year | playtime_hours |
|---|---|---|---|---|
| 1 | The Legend of Zelda | 1 | 1986 | 20 |
| 2 | Super Mario Bros. | 1 | 1985 | 10 |
| 3 | Final Fantasy VII | 2 | 1997 | 40 |
| 4 | The Witcher 3 | 3 | 2015 | 100 |
| 5 | Minecraft | 4 | 2011 | 9999 |
| 6 | Grand Theft Auto V | 5 | 2013 | 80 |
| 7 | Dark Souls | 6 | 2011 | 60 |
| 8 | Portal 2 | 7 | 2011 | 8 |
| 9 | Red Dead Redemption 2 | 5 | 2018 | 70 |
| 10 | The Last of Us | 8 | 2013 | 15 |
| 11 | Halo: Combat Evolved | 9 | 2001 | 10 |
| 12 | God of War | 10 | 2018 | 25 |