🔹 Introducción
- Consultar y filtrar datos (
SELECT,WHERE). - Resumir información con funciones de agregación (
COUNT,AVG,MIN,MAX). - Agrupar resultados con
GROUP BYy filtrarlos conHAVING. - Combinar tablas con
JOIN. - Usar subconsultas dentro de otras consultas.
👉 El problema: a veces las consultas se vuelven largas, repetitivas o difíciles de leer.
✅ La solución: crear una vista (VIEW).
Una vista es como una consulta guardada que se comporta como una tabla virtual.
- No almacena los datos físicamente (usa los datos de las tablas originales).
- Permite simplificar el trabajo.
- Se puede consultar igual que una tabla.
🔹 Sintaxis básica
CREATE VIEW nombre_vista AS
SELECT columnas
FROM tabla
WHERE condición;
👉 Luego se usa igual que una tabla:
SELECT * FROM nombre_vista;
🔹 1. Nuestra base de ejemplo
Seguimos con nuestras tablas:
alumnos
| id | nombre | edad | ciudad |
|---|---|---|---|
| 1 | Ana | 20 | Buenos Aires |
| 2 | Juan | 17 | Ciudad de México |
| 3 | Laura | 22 | Madrid |
| 4 | Pedro | 18 | Madrid |
cursos
| id | curso |
|---|---|
| 1 | Matemáticas |
| 2 | Historia |
| 3 | Inglés |
inscripciones
| alumno_id | curso_id |
|---|---|
| 1 | 1 |
| 1 | 3 |
| 2 | 2 |
| 3 | 1 |
| 4 | 3 |
🔹 2. Ejemplo simple: vista de alumnos mayores de edad
Creamos una vista que contenga solo a los alumnos con edad mayor o igual a 18:
CREATE VIEW alumnos_mayores AS
SELECT nombre, edad, ciudad
FROM alumnos
WHERE edad >= 18;
👉 Ahora podemos usar esta vista como si fuera una tabla:
SELECT * FROM alumnos_mayores;
📊 Resultado esperado:
| nombre | edad | ciudad |
|---|---|---|
| Ana | 20 | Buenos Aires |
| Laura | 22 | Madrid |
| Pedro | 18 | Madrid |
🔹 3. Ejemplo con JOIN en una vista
Podemos crear una vista que muestre el nombre de cada alumno y el curso en el que está inscrito:
CREATE VIEW vista_alumnos_cursos AS
SELECT a.nombre, c.curso
FROM inscripciones i
INNER JOIN alumnos a ON i.alumno_id = a.id
INNER JOIN cursos c ON i.curso_id = c.id;
👉 Consultando la vista:
SELECT * FROM vista_alumnos_cursos;
📊 Resultado esperado:
| nombre | curso |
|---|---|
| Ana | Matemáticas |
| Ana | Inglés |
| Juan | Historia |
| Laura | Matemáticas |
| Pedro | Inglés |
🔹 4. Ejemplo con funciones de agregación
Podemos crear una vista que muestre la cantidad de alumnos por curso:
CREATE VIEW vista_cantidad_por_curso AS
SELECT c.curso, COUNT(i.alumno_id) AS cantidad_alumnos
FROM cursos c
LEFT JOIN inscripciones i ON c.id = i.curso_id
GROUP BY c.curso;
👉 Consultando la vista:
SELECT * FROM vista_cantidad_por_curso;
📊 Resultado esperado:
| curso | cantidad_alumnos |
|---|---|
| Matemáticas | 2 |
| Historia | 1 |
| Inglés | 2 |
🔹 5. Modificar y eliminar vistas
- Para modificar una vista, se usa
CREATE OR REPLACE VIEW. - Para eliminar una vista, se usa:
DROP VIEW nombre_vista;
🔹 6. Ventajas de usar vistas
- Simplifican consultas complejas.
- Mejoran la legibilidad del código SQL.
- Reutilización: escribís una consulta una vez y la usás cuantas veces quieras.
- Pueden servir como capa de seguridad: un usuario puede consultar la vista sin tener acceso directo a las tablas originales.
🔹 7. Ejercicio práctico
- Crea una vista llamada
vista_madridque muestre solo a los alumnos que viven en Madrid. - Crea una vista llamada
vista_alumnos_historiaque muestre el nombre de los alumnos inscritos en el curso de Historia. - Crea una vista llamada
vista_promedio_ciudadque muestre el promedio de edad por ciudad.
🔹 Soluciones
CREATE VIEW vista_madrid AS
SELECT * FROM alumnos
WHERE ciudad = 'Madrid';
CREATE VIEW vista_alumnos_historia AS
SELECT a.nombre
FROM alumnos a
JOIN inscripciones i ON a.id = i.alumno_id
JOIN cursos c ON i.curso_id = c.id
WHERE c.curso = 'Historia';
CREATE VIEW vista_promedio_ciudad AS
SELECT ciudad, AVG(edad) AS promedio
FROM alumnos
GROUP BY ciudad;
📝 Mini Quiz
Resultados
#1. ¿Qué es una vista en SQL?
#2. ¿Qué comando se usa para eliminar una vista?
#3. Si queremos reutilizar una consulta compleja de forma más sencilla, ¿qué deberíamos usar?
🔹 Resumen de la lección
- Una vista (VIEW) es una consulta guardada que se comporta como una tabla virtual.
- Se crean con
CREATE VIEWy se consultan conSELECT. - Se pueden usar en vistas simples, con
JOIN, o con funciones de agregación. - Se eliminan con
DROP VIEW. - Son muy útiles para simplificar, reutilizar y proteger consultas.
👉 En la próxima lección aprenderás sobre funciones de texto y fechas (UPPER, LOWER, CONCAT, NOW, YEAR, MONTH), que te permitirán trabajar con cadenas de texto y valores de tiempo de forma más eficiente.
🔗 Este contenido pertenece al Curso SQL completo. Accede para descubrir más lecciones.