Tutorial de SQL
Cómo usar subconsultas en SQL
Una subconsulta es un SELECT entre paréntesis dentro de otra consulta. Si devuelve un solo valor, puedes usarlo como si fuera un número, por ejemplo para encontrar a quienes están arriba del promedio sin copiarlo a mano. Aquí verás la sintaxis, un ejemplo resuelto y por qué WHERE columna > AVG(columna) no funciona.
Subconsulta: una consulta dentro de otra
Una subconsulta es un SELECT escrito entre paréntesis dentro de otra consulta. Si devuelve un solo valor (una fila y una columna), puedes usarlo como si fuera un número.
Sirve para comparar contra algo que hay que calcular: el promedio, el máximo, el total… sin copiar el número a mano.
Cómo se escribe
SELECT … FROM tabla WHERE columna > (SELECT AVG(columna) FROM tabla)
- ( SELECT … )
- la subconsulta, siempre entre paréntesis
- AVG(columna)
- debe devolver un solo valor para poder compararlo
- columna >
- cada fila se compara contra ese valor
Ejemplo resuelto
SELECT nombre, promedio FROM alumnos WHERE promedio > (SELECT AVG(promedio) FROM alumnos) ORDER BY promedio DESC| Número de fila# | nombre | promedio |
|---|---|---|
| 1 | Regina Salinas | 9.8 |
| 2 | Valeria Núñez | 9.4 |
| 3 | Sebastián Lara | 9.1 |
| 4 | Mateo Guzmán | 8.9 |
| 5 | Camila Ortega | 8.6 |
Alumnos con promedio mayor al promedio del grupo completo.
- WHERE precio > AVG(precio) es un error: las funciones de resumen no van directo en WHERE. Por eso se usa la subconsulta.
- Ejecuta primero la subconsulta sola para ver qué número devuelve.
Preguntas frecuentes
¿Por qué no puedo escribir WHERE precio > AVG(precio)?
Porque las funciones de resumen no van directo en WHERE. La subconsulta calcula primero el promedio y la consulta principal compara contra ese valor.
¿Qué debe devolver una subconsulta para compararla?
Un solo valor: una fila y una columna, como un promedio o un máximo.
¿Cómo reviso que mi subconsulta esté bien?
Ejecuta primero la subconsulta sola para ver qué número devuelve.