📘 Lección 10: Subconsultas (Subqueries) en SQL

🔹 Introducción

Hasta ahora aprendiste a:

  • Seleccionar y filtrar datos (SELECT, WHERE, ORDER BY).
  • Hacer resúmenes con funciones de agregación (COUNT, AVG, MIN, MAX).
  • Agrupar resultados con GROUP BY y filtrarlos con HAVING.
  • Combinar tablas con JOIN.

Pero hay ocasiones en que necesitamos usar el resultado de una consulta dentro de otra consulta.
Eso se logra con una subconsulta (o subquery).

👉 Una subconsulta es una consulta SQL anidada dentro de otra consulta.

🔹 1. Tipos de subconsultas

Las subconsultas se pueden usar en distintos lugares:

  1. En la cláusula WHERE (para filtrar datos usando el resultado de otra consulta).
  2. En la cláusula FROM (como si fuera una tabla temporal).
  3. En la cláusula SELECT (para calcular valores adicionales).

🔹 2. Nuestra base de ejemplo

Seguimos con nuestras tablas de alumnos y cursos:

alumnos

idnombreedadciudad
1Ana20Buenos Aires
2Juan17Ciudad de México
3Laura22Madrid
4Pedro18Madrid

cursos

idcurso
1Matemáticas
2Historia
3Inglés

inscripciones

alumno_idcurso_id
11
13
22
31
43

🔹 3. Subconsulta en WHERE

Queremos ver los alumnos que tienen la edad máxima.

Primero:

SELECT MAX(edad) FROM alumnos;

Esto devuelve 22.

Ahora usamos esa consulta dentro de WHERE:

SELECT nombre, edad
FROM alumnos
WHERE edad = (SELECT MAX(edad) FROM alumnos);

📊 Resultado esperado:

nombreedad
Laura22

🔹 4. Subconsulta en FROM

Podemos usar una subconsulta como tabla temporal.

Ejemplo: obtener la edad promedio por ciudad y luego mostrar solo las que superan 18.

SELECT ciudad, promedio
FROM (
    SELECT ciudad, AVG(edad) AS promedio
    FROM alumnos
    GROUP BY ciudad
) AS sub
WHERE promedio > 18;

📊 Resultado esperado:

ciudadpromedio
Buenos Aires20
Madrid20

👉 La subconsulta calcula los promedios.
👉 La consulta principal filtra los que son mayores a 18.

🔹 5. Subconsulta en SELECT

Podemos usar una subconsulta para agregar un valor calculado en cada fila.

Ejemplo: mostrar cada alumno junto con el promedio general de edad:

SELECT nombre, edad,
  (SELECT AVG(edad) FROM alumnos) AS promedio_general
FROM alumnos;

📊 Resultado esperado:

nombreedadpromedio_general
Ana2019.25
Juan1719.25
Laura2219.25
Pedro1819.25

👉 La subconsulta devuelve el promedio una sola vez, pero se repite en cada fila.

🔹 6. Ejemplos prácticos

📌 Ejemplo 1: Mostrar el nombre de los alumnos que están inscriptos en el curso “Inglés”.

SELECT nombre
FROM alumnos
WHERE id IN (
    SELECT alumno_id
    FROM inscripciones
    WHERE curso_id = (
        SELECT id FROM cursos WHERE curso = 'Inglés'
    )
);

📊 Resultado esperado:

nombre
Ana
Pedro

📌 Ejemplo 2: Mostrar los cursos que tienen más de 1 alumno.

SELECT curso
FROM cursos
WHERE id IN (
    SELECT curso_id
    FROM inscripciones
    GROUP BY curso_id
    HAVING COUNT(*) > 1
);

📊 Resultado esperado:

curso
Matemáticas
Inglés

🔹 7. Ejercicio práctico

  1. Muestra el alumno con la menor edad usando una subconsulta en WHERE.
  2. Calcula el promedio de edad por ciudad usando una subconsulta en FROM.
  3. Muestra los nombres de los alumnos que están inscriptos en “Matemáticas” usando una subconsulta.

🔹 Soluciones

SELECT nombre, edad
FROM alumnos
WHERE edad = (SELECT MIN(edad) FROM alumnos);
SELECT ciudad, promedio
FROM (
  SELECT ciudad, AVG(edad) AS promedio
  FROM alumnos
  GROUP BY ciudad
) AS sub;
SELECT nombre
FROM alumnos
WHERE id IN (
  SELECT alumno_id
  FROM inscripciones
  WHERE curso_id = (
    SELECT id FROM cursos WHERE curso = 'Matemáticas'
  )
);

📝 Mini Quiz

 

Resultados

#1. ¿Qué es una subconsulta en SQL?

#2. ¿Dónde se puede usar una subconsulta?

#3. Si quiero mostrar el alumno más joven usando una subconsulta, ¿qué función necesito?

Previa
Finalizar

🔹 Resumen de la lección

  • Una subconsulta es una consulta dentro de otra.
  • Se puede usar en:
    • WHERE → para comparar valores con resultados de otra consulta.
    • FROM → como tabla temporal.
    • SELECT → para calcular valores adicionales.
  • Son muy útiles cuando necesitamos pasos intermedios sin crear nuevas tablas.

👉 En la próxima lección aprenderás sobre Vistas (Views): consultas guardadas que se comportan como tablas virtuales, ideales para simplificar queries complejas.

⚡ Aprende más practicando con las demás secciones del Curso SQL.

Scroll al inicio