Subqueries, ou subconsultas, são consultas aninhadas dentro de outra consulta SQL. Elas podem ser usadas em várias partes de uma consulta principal, dependendo do objetivo desejado. Vamos explorar como subconsultas podem ser usadas nas cláusulas SELECT, WHERE e FROM.

1. Uso de Subqueries na Cláusula SELECT

Subqueries na cláusula SELECT são usadas para calcular valores derivados ou realizar agregações que serão retornadas como parte do conjunto de resultados. Elas permitem que você retorne dados adicionais que não estão diretamente disponíveis na tabela principal.

Exemplo: Suponha que você tem uma tabela Empregados com id_empregado, nome, e salario, e uma tabela Departamentos com id_departamento e nome_departamento. Se você quiser listar os empregados junto com o nome do departamento ao qual pertencem, pode fazer assim:

SELECT
    e.nome,
    e.salario,
    (SELECT nome_departamento
     FROM Departamentos d
     WHERE d.id_departamento = e.id_departamento) AS departamento
FROM Empregados e;

Explicação:

2. Uso de Subqueries na Cláusula WHERE

Subqueries na cláusula WHERE são utilizadas para filtrar registros com base em condições que dependem dos resultados de outra consulta. Elas são provavelmente o uso mais comum de subconsultas.

Exemplo: Suponha que você quer encontrar todos os empregados cujo salário é superior à média salarial de todos os empregados.

SELECT nome, salario
FROM Empregados
WHERE salario > (
    SELECT AVG(salario)
    FROM Empregados
);

Explicação:

3. Uso de Subqueries na Cláusula FROM

Subqueries na cláusula FROM são usadas para tratar o resultado da subconsulta como uma tabela temporária. Isso permite que você faça consultas mais complexas, onde os resultados intermediários precisam ser processados antes de se unirem à consulta principal.

Exemplo: Suponha que você tenha uma tabela Pedidos com id_pedido, id_cliente, e valor_total, e deseja encontrar a média dos valores dos pedidos para cada cliente.

SELECT id_cliente, AVG(valor_total) AS media_valor_pedidos
FROM (
    SELECT id_cliente, valor_total
    FROM Pedidos
) AS sub_pedidos
GROUP BY id_cliente;

Explicação: