Aprende SQL

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 → uso 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

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

developers4 cols

Estructura

🔑idINTEGERnameTEXTcountryTEXTfounded_yearINTEGER

Datos de ejemplo (5 filas)

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
videogames5 cols

Estructura

🔑idINTEGERtitleTEXTdeveloper_idINTEGERyearINTEGERplaytime_hoursINTEGER

Datos de ejemplo (5 filas)

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

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.

sql

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'.

sql

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.

sql

Elimina la vista 'stats_por_dev' de forma segura usando IF EXISTS.

sql