IOKELU
Nivel: Intermedio
💡 Prueba las consultas:
Puedes ejecutar cualquier subconsulta en nuestra consola interactiva: Abrir consola SQL →

Subconsultas en SQL: potencia tus consultas con lógica interna

Una subconsulta es una consulta dentro de otra consulta. Permite resolver problemas complejos, filtrar datos dinámicamente y crear condiciones avanzadas.

1. ¿Qué es una subconsulta?

Una subconsulta es una consulta que se ejecuta dentro de otra. SQL evalúa primero la subconsulta y luego usa su resultado en la consulta principal.


SELECT nombre FROM usuarios
WHERE id IN (SELECT usuario_id FROM pedidos);
    

2. Subconsultas con IN


SELECT nombre FROM usuarios
WHERE id IN (
    SELECT usuario_id FROM pedidos
);
    

3. Subconsultas en WHERE


SELECT * FROM productos
WHERE precio > (
    SELECT AVG(precio) FROM productos
);
    

4. Subconsultas en SELECT


SELECT nombre,
       (SELECT COUNT(*) FROM pedidos WHERE usuario_id = usuarios.id) AS total_pedidos
FROM usuarios;
    

5. Subconsultas en FROM

Puedes usar subconsultas como si fueran tablas temporales.


SELECT ciudad, promedio
FROM (
    SELECT ciudad, AVG(edad) AS promedio
    FROM usuarios
    GROUP BY ciudad
) AS tabla_temp;
    

6. Ejemplos prácticos


SELECT * FROM empleados
WHERE salario > (SELECT AVG(salario) FROM empleados);

SELECT nombre FROM usuarios
WHERE id IN (SELECT usuario_id FROM pedidos WHERE estado = 'Enviado');

SELECT producto, precio,
       (SELECT MAX(precio) FROM productos) AS precio_maximo
FROM productos;
    

7. Ejercicios para practicar

8. Mini‑proyecto: Usuarios con pedidos enviados


CREATE TABLE pedidos (
    id INT PRIMARY KEY,
    usuario_id INT,
    estado VARCHAR(50)
);

INSERT INTO pedidos VALUES
(1, 1, 'Enviado'),
(2, 1, 'Pendiente'),
(3, 2, 'Enviado');

SELECT nombre FROM usuarios
WHERE id IN (
    SELECT usuario_id FROM pedidos WHERE estado = 'Enviado'
);
    

9. Errores comunes

10. Preguntas frecuentes

¿Son mejores que los JOIN?

Depende del caso; a veces JOIN es más eficiente.

¿Puedo anidar subconsultas?

Sí, pero no abuses: puede volverse difícil de leer.


Siguiente guía

SQL Intermedio – JOINS Avanzados →