Subconsultas

Completado

A menudo, debe recuperar datos en función de las condiciones derivadas de los datos de la base de datos.

Las subconsultas permiten hacerlo al permitirle usar el resultado de una instrucción SELECT como parte de otra. Esto es útil para tareas como encontrar a todos los clientes que han realizado pedidos que superen un promedio determinado o identifiquen productos suministrados por un conjunto específico de proveedores.

Las subconsultas se pueden usar en los contextos siguientes:

Dentro de cláusulas de SELECT instrucciones (FROM, WHERE, HAVING cláusula)

Dentro de las instrucciones de manipulación de datos (INSERT, UPDATE, DELETE instrucción)

Puntos clave a resaltar

Una subconsulta siempre es una SELECT instrucción.

La subconsulta se incluye entre paréntesis ().

La consulta externa usa el resultado de la subconsulta.

Ejemplos de subconsulta

SELECT product_name, price
FROM sales.products
WHERE price > (
    SELECT AVG(price)
    FROM sales.products
);

Esta consulta recupera los nombres y precios de los productos de la tabla sales.products donde el producto price es mayor que el promedio price de todos los productos de la misma tabla. Usa una subconsulta dentro de la cláusula WHERE para calcular el promedio price seleccionando AVG(price) en la tabla sales.products. A continuación, el resultado de esta subconsulta se compara con la columna price de la consulta externa para filtrar y mostrar solo los productos cuyos precios superen este promedio calculado.

SELECT customer_id, customer_name
FROM sales.customers
WHERE customer_id IN (
    SELECT DISTINCT customer_id
    FROM sales.orders
);

Esta consulta recupera los identificadores y los nombres de los clientes de la tabla sales.customers que han realizado al menos un pedido. Esto se logra mediante una subconsulta dentro de la cláusula WHERE. La subconsulta selecciona valores distintos customer_id de la tabla sales.orders, que representan a los clientes que han realizado pedidos. A continuación, la consulta externa usa estos identificadores para filtrar y mostrar la información del cliente, lo que garantiza que solo se incluyan en el resultado los clientes asociados a los pedidos.

SELECT supplier_id, AVG (price) AS avg_price
FROM (
    SELECT supplier_id, price
    FROM sales.products
) AS product_prices
GROUP BY supplier_id;

Esta consulta calcula el precio medio del producto para cada proveedor. Usa una subconsulta en la FROM cláusula para seleccionar y el supplier_id precio de sales.products table. A continuación, la consulta externa agrupa el resultado por supplier_id y calcula el promedio price de cada grupo. Este enfoque puede resultar útil cuando desea realizar la agregación en un conjunto filtrado o preprocesado de datos.

UPDATE sales.products
SET price = price * 1.1
WHERE category_id = (
    SELECT category_id
    FROM sales.products
    GROUP BY category_id
    ORDER BY AVG(price) DESC LIMIT 1
);

Esta consulta aumenta los precios de los productos de la categoría con el precio medio más alto en un 10 %. La instrucción UPDATE modifica la columna price de la tabla sales.products, multiplicándola en 1.1 para las filas que coinciden con la condición de la cláusula WHERE.

La subconsulta dentro de la cláusula WHERE determina el category_id de la categoría con el promedio price más alto agrupando los productos por su category_id, calculando el promedio price de cada grupo y ordenándolos en orden descendente del promedio price. LIMIT 1 garantiza que solo el resultado superior, es decir, la categoría con el promedio price más alto se selecciona y se usa para filtrar las filas de la actualización.