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
SELECT ...
FROM ...
WHERE columna > (SELECT ...);Primer ejemplo guiado
| id | nombre | categoria | precio | stock |
|---|---|---|---|---|
| 1 | Teclado | Accesorios | 35 | 12 |
| 2 | Monitor | Pantallas | 189 | 5 |
| 3 | Ratón | Accesorios | 22 | 0 |
| 4 | Portátil | Equipos | 899 | 3 |
| 5 | Webcam | Accesorios | 59 | 8 |
Analiza la consulta antes de comprobar el resultado:
SELECT nombre, precio
FROM productos
WHERE precio > (SELECT AVG(precio) FROM productos)
ORDER BY precio;| nombre | precio |
|---|---|
| Portátil | 899 |
Qué ocurre paso a paso
- La consulta interior calcula el precio medio.
- La exterior compara cada producto con ese valor.
- Solo el Portátil supera la media del conjunto.
Error frecuente
Consulta o razonamiento problemático
WHERE precio > SELECT AVG(precio) FROM productosLa subconsulta debe ir entre paréntesis.
Práctica guiada
Resuelve una sola dificultad cada vez
Muestra pedidos cuyo total sea mayor que el promedio de pedidos.
Solución razonada
SELECT id, total FROM pedidos WHERE total > (SELECT AVG(total) FROM pedidos);La subconsulta devuelve un único valor, adecuado para compararlo con cada pedido.
Comprueba: identifica qué parte recupera, filtra, transforma, relaciona o modifica los datos.
Ahora sin guía
Transfiere lo aprendido
Muestra empleados cuyo salario sea el máximo de su departamento mediante una subconsulta correlacionada.
Comparar con una solución posible
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.