SQL y Bases de DatosConsultas AvanzadasLección 8 de 20
Subconsultas
Una subconsulta es un SELECT dentro de otro SELECT. Permiten resolver problemas complejos en pasos. Pueden usarse en WHERE (con IN, EXISTS), en FROM (tabla derivada), o en SELECT (columna calculada). Las subconsultas correlacionadas referencian la consulta externa.
-- Subconsulta en WHERE con IN
-- Productos que alguna vez se han vendido
SELECT nombre, precio
FROM products
WHERE id IN (
SELECT DISTINCT product_id
FROM order_items
);
-- Subconsulta en WHERE con NOT IN
-- Productos que NUNCA se han vendido
SELECT nombre, precio
FROM products
WHERE id NOT IN (
SELECT product_id FROM order_items
WHERE product_id IS NOT NULL -- necesario con NOT IN y NULLs
);
-- Subconsulta en WHERE con comparación
-- Empleados que ganan más que el promedio
SELECT nombre, salario
FROM empleados
WHERE salario > (
SELECT AVG(salario) FROM empleados
)
ORDER BY salario DESC;
-- Subconsulta correlacionada (referencia a tabla externa)
-- Para cada usuario, su pedido más reciente
SELECT
u.nombre,
(SELECT MAX(o.fecha)
FROM orders o
WHERE o.user_id = u.id) AS ultimo_pedido
FROM users u;
-- EXISTS / NOT EXISTS (más eficiente que IN para grandes tablas)
-- Usuarios que tienen al menos un pedido
SELECT nombre, email
FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);
-- Subconsulta en FROM (tabla derivada / derived table)
-- Top 3 categorías por ingresos con su porcentaje del total
SELECT
categoria,
ingresos,
ROUND(ingresos * 100.0 / SUM(ingresos) OVER (), 2) AS porcentaje
FROM (
SELECT p.categoria, SUM(oi.precio * oi.cantidad) AS ingresos
FROM order_items oi
JOIN products p ON p.id = oi.product_id
GROUP BY p.categoria
) AS ventas_por_categoria
ORDER BY ingresos DESC
LIMIT 3;
ConsejoPrefiere EXISTS sobre IN cuando la subconsulta puede devolver NULLs o miles de filas. EXISTS se detiene al encontrar el primer resultado, IN evalúa toda la lista. Con NOT IN y NULLs en la lista, NINGUNA fila pasará el filtro.
Practica esta lección
Resuelve los ejercicios del curso de SQL y Bases de Datos en la app, gratis y con corrección automática.
Empezar a practicar