CodeGym /Cursos /SQL SELF /¿Qué son las consultas anidadas y para qué sirven?

¿Qué son las consultas anidadas y para qué sirven?

SQL SELF
Nivel 13 , Lección 0
Disponible

Ya estás listo para el siguiente paso: trabajar con consultas anidadas en SQL. Hoy vamos a ver qué son, para qué sirven, qué tipos existen y por qué son útiles en la vida real.

Las consultas anidadas (o subconsultas) son consultas SQL que se usan dentro de otras consultas SQL. Es como una matrioshka o una cebolla: tienes una consulta externa y dentro de ella hay otra consulta más pequeña. La subconsulta se ejecuta primero y su resultado lo usa la consulta externa (a veces llamada "principal").

Vamos a verlo con un ejemplo:

Ejemplo 1: Cómo funciona

Tenemos una tabla students con los siguientes datos:

id nombre edad grupo_id
1 Alicia 20 1
2 Bob 22 2
3 Clark 21 1
4 Dina 23 3
5 Emilia 22 2

Y también una tabla groups, donde se guarda la info sobre los nombres de los grupos:

id nombre
1 Clase de matemáticas
2 Clase de física
3 Clase de literatura

Si queremos saber los nombres de los grupos donde estudian los estudiantes, podemos usar una consulta anidada:

SELECT nombre
FROM groups 
WHERE id IN (
    SELECT grupo_id 
    FROM students 
    WHERE edad > 21
);

¿Qué pasa aquí?

La subconsulta:

SELECT grupo_id 
FROM students 
WHERE edad > 21

Esta consulta selecciona el grupo_id de todos los estudiantes mayores de 21 años. Resultado: una lista de ids de grupos, por ejemplo [2, 3].

La consulta principal:

SELECT nombre 
FROM groups 
WHERE id IN ([resultados de la subconsulta])

Esta consulta usa los resultados de la subconsulta y devuelve los nombres de los grupos con id igual a 2 o 3.

Resultado:

Clase de física
Clase de literatura

¿Todavía no te queda claro? Normal. Pero tranqui, ahora lo vamos a desmenuzar todo.

Empecemos con una idea simple: el resultado de una consulta SELECT es como una tabla virtual. De verdad, tiene columnas, tiene filas. ¿No es una tabla?

Y si el resultado de la consulta es una tabla, puedes usarla donde usarías tablas reales: en un JOIN, por ejemplo, o en estructuras más complejas.

No tiene nombre, y eso es un problema. Pero las columnas-expresiones tampoco tienen nombre y lo solucionamos poniéndoles alias — pseudónimos. Lo mismo se puede hacer con las tablas virtuales.

Más detalles en las próximas lecciones — no te hago spoiler :P

¿Por qué molan las consultas anidadas?

  1. Hacen más fáciles las tareas complicadas. A veces una tabla no tiene toda la info que quieres sacar. Las subconsultas te dejan dividir la consulta en dos pasos: primero sacas un resultado intermedio y luego lo usas para obtener los datos finales.

  2. Trabajar con resultados intermedios. Las consultas anidadas son útiles cuando necesitas hacer cálculos extra antes de procesar los datos. Por ejemplo, buscar el valor mínimo o sumar algo.

  3. Mejoran la legibilidad del código. Las subconsultas hacen que el código sea más estructurado, sobre todo si trabajas con tablas grandes y lógica complicada.

Tipos principales de consultas anidadas

Puedes usar subconsultas en diferentes partes de una consulta SQL. Según dónde las pongas, hay varios tipos.

  1. Subconsultas en SELECT. La subconsulta está en la lista de columnas y se usa para calcular valores. Esto mola, por ejemplo, para añadir una columna nueva en los resultados.

Ejemplo — añadimos una columna con la edad máxima entre los estudiantes:

SELECT nombre, edad,
       (SELECT MAX(edad) FROM students) AS edad_maxima 
FROM students;

Resultado:

nombre edad edad_maxima
Alicia 20 23
Bob 22 23
Clark 21 23
Dina 23 23
Emilia 22 23
  1. Subconsultas en FROM. La subconsulta se usa como una tabla temporal. Esto es útil si primero necesitas agrupar o transformar los datos.

Ejemplo — calcular la edad media de los estudiantes en cada grupo:

SELECT tmp.grupo_id, tmp.edad_media
FROM (
    SELECT grupo_id, AVG(edad) AS edad_media
    FROM students
    GROUP BY grupo_id
) AS tmp -- Le ponemos el alias tmp a la tabla temporal 
WHERE tmp.edad_media > 21;

Resultado:

grupo_id edad_media
2 22.0
3 23.0
  1. Subconsultas en WHERE y HAVING. Las subconsultas pueden ser una condición que filtra filas. Esto se usa mucho para comprobar
  2. si existen registros o para comparar valores.

Ejemplo — estudiantes que son mayores que la edad media:

SELECT nombre, edad
FROM students
WHERE edad > (
    SELECT AVG(edad) 
    FROM students
);

Resultado:

nombre edad
Bob 22
Dina 23
Emilia 22

Ventajas de usar consultas anidadas

Más flexibilidad: las consultas anidadas te dejan trabajar con estructuras de datos más complejas.

Dividir tareas en pasos: puedes separar la lógica en subconsultas, lo que hace el código más fácil de leer.

Acceso a datos intermedios: puedes procesar datos "al vuelo", sin tener que crear tablas temporales en la base de datos.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION