Módulo 5 · Consultas avanzadas

Subconsultas: usar el resultado de otra consulta

Divide una pregunta compleja en una consulta interior y otra exterior.

⏱ 24 minNivel: IntermedioRequisito: Filtros, agregaciones y JOIN

0 de 40 lecciones

Al terminar esta lección podrás

  • Construir una subconsulta escalar.
  • Comprobar la consulta interior.
  • Reconocer una subconsulta correlacionada.

Antes de empezar: Filtros, agregaciones y JOIN. Explica en una frase qué recuerdas antes de continuar.

La idea, sin código

Una subconsulta produce un valor o conjunto que otra consulta puede utilizar. Antes de combinarlas, ejecuta y comprende la consulta interior de forma independiente.

Pregunta guía: ¿qué representa cada fila antes y después de aplicar este concepto?

Sintaxis mínima

Estructura
SELECT ...
FROM ...
WHERE columna > (SELECT ...);

Primer ejemplo guiado

Datos de ejemplo: tabla productos
idnombrecategoriapreciostock
1TecladoAccesorios3512
2MonitorPantallas1895
3RatónAccesorios220
4PortátilEquipos8993
5WebcamAccesorios598

Analiza la consulta antes de comprobar el resultado:

SQL
SELECT nombre, precio
FROM productos
WHERE precio > (SELECT AVG(precio) FROM productos)
ORDER BY precio;
Resultado esperado
nombreprecio
Portátil899

Qué ocurre paso a paso

  1. La consulta interior calcula el precio medio.
  2. La exterior compara cada producto con ese valor.
  3. Solo el Portátil supera la media del conjunto.
Comprueba que lo entendiste

¿Qué conviene comprobar primero?

Error frecuente

Consulta o razonamiento problemático

Revisar
WHERE precio > SELECT AVG(precio) FROM productos

La subconsulta debe ir entre paréntesis.

Práctica guiada

Básica · apoyo graduado

Resuelve una sola dificultad cada vez

Muestra pedidos cuyo total sea mayor que el promedio de pedidos.

Ahora sin guía

Intermedia · práctica autónoma

Transfiere lo aprendido

Muestra empleados cuyo salario sea el máximo de su departamento mediante una subconsulta correlacionada.

Comparar con una solución posible
SQL
SELECT e.nombre, e.departamento, e.salario
FROM empleados AS e
WHERE e.salario = (
  SELECT MAX(e2.salario)
  FROM empleados AS e2
  WHERE e2.departamento = e.departamento
);

Puede existir otra solución válida. Comprueba que produce el resultado pedido y que puedes explicar cada cláusula.

Resumen para llevarte

  • Prueba la consulta interior por separado cuando sea posible.
  • Identifica si devuelve un valor o varias filas.
  • Una subconsulta correlacionada depende de la fila exterior.

Siguiente paso: Continúa con UNION y operaciones de conjuntos.

Consulta rápida