Vistas: CREATE VIEW
Lección 06 · Estructura de tablas
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.
Diagrama: “Consulta compleja” (
SELECT v.title, d.name... JOIN...) →CREATE VIEW juegos_modernos AS→ “Vista guardada”juegos_modernos→ usoSELECT * 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 |
Tablas de esta lección
Estructura
Datos de ejemplo (5 filas)
| 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 |
Estructura
Datos de ejemplo (5 filas)
| 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 |
Ejercicios
Crea una vista llamada 'juegos_largos' con el title y playtime_hours de juegos con más de 50 horas. Luego consulta toda la vista.
Crea una vista 'catalogo' que une videogames con developers. La vista debe contener title, name (del developer), country y year. Después, consulta title, name y year únicamente de los juegos cuyos desarrolladores tengan country = 'Japón'.
Crea una vista 'stats_por_dev' con el nombre del desarrollador, el número de juegos (total) y el promedio de horas (avg_horas). Luego muestra solo los que tienen más de 1 juego.
Elimina la vista 'stats_por_dev' de forma segura usando IF EXISTS.