Pular para o conteúdo principal

Subconsulta SQL: Um guia abrangente

Descubra como dominar as subconsultas SQL para aprimorar suas consultas a bancos de dados. Saiba mais sobre subconsultas correlacionadas, não correlacionadas e recursivas. Saiba mais sobre a ordem de execução e como combinar subconsultas SQL com outros recursos SQL.
Actualizado 16 de jan. de 2025  · 8 min de leitura

As subconsultas SQL são uma ferramenta poderosa no gerenciamento de bancos de dados, permitindo uma recuperação de dados mais complexa e eficiente. Este guia guiará você pelos fundamentos das subconsultas SQL, oferecendo insights sobre suas aplicações práticas e técnicas avançadas. Quer você seja um iniciante ou um profissional experiente, dominar as subconsultas pode aprimorar significativamente suas habilidades em SQL.

Para os iniciantes em SQL, considere começar com nosso curso SQL Intermediário para criar uma base sólida. Além disso, acho que o SQL Basics Cheat Sheet, que você pode baixar, é uma referência útil porque contém todas as funções SQL mais comuns. Por fim, gostaria de dizer que as subconsultas são uma pergunta comum para você. perguntas comuns em entrevistas sobre SQL, portanto, se você está se preparando para uma entrevista, veio ao lugar certo para fazer uma revisão.

O que é uma subconsulta SQL?

Uma subconsulta permite que as consultas SQL sejam mais modulares, lidando com tarefas que, de outra forma, exigiriam várias consultas separadas.

Definição e objetivo

Uma subconsulta SQL é uma consulta aninhada em outra consulta SQL, usada para realizar operações que exigem várias etapas ou lógica complexa. A função das subconsultas no SQL inclui o seguinte:

  • Filtragem de registros com base em dados de tabelas relacionadas.
  • Agregação de dados e realização de cálculos de forma dinâmica.
  • Referência cruzada de dados entre tabelas para obter informações específicas.
  • Selecionar linhas condicionalmente sem exigir uniões explícitas ou lógica de código externo.

Parece muito, mas isso fará sentido à medida que explorarmos esses aspectos no tutorial.

Tipos de subconsultas

Talvez você se surpreenda ao saber que há diferentes tipos de subconsultas. Os diferentes tipos são agrupados com base em diferentes tipos de necessidades de recuperação de dados e são adequados a elas. Você pode escolher entre as seguintes subconsultas, dependendo da operação que deseja executar:

Subconsultas escalares

As subconsultas escalares retornam um único valor, como uma linha e uma coluna. Eles são usados com frequência quando se espera um único valor, como em cálculos, comparações ou atribuições nas cláusulas SELECT ou WHERE.

No exemplo abaixo, a subconsulta escalar (SELECT AVG(salary) FROM employees) retorna um único valor, o salário médio, e o compara com o salário de cada funcionário.

-- Example of Scalar Subquery 
-- Compares each salary to the average salary
SELECT employee_name, 
       salary,
       (SELECT AVG(salary) FROM employees) AS average_salary 
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

Subconsultas de coluna

As subconsultas de coluna retornam uma única coluna, mas várias linhas. Essas subconsultas são frequentemente usadas com operadores como IN ou ANY, em que a consulta externa compara valores de várias linhas.

Por exemplo, a subconsulta abaixo retorna uma lista de IDs de departamentos localizados em Nova York, que a consulta principal usa para filtrar os funcionários desses departamentos.

-- Example of Column Subquery 
-- Filters based on departments in New York
SELECT employee_name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');

Subconsultas de linha

As subconsultas de linha retornam uma única linha contendo várias colunas. Essas subconsultas são normalmente usadas com operadores de comparação que podem comparar uma linha de dados, como os operadores = ou IN, quando são esperados vários valores.

A subconsulta a seguir recupera o departamento e o cargo de um gerente, e a consulta externa encontra funcionários com valores correspondentes.

-- Example of Row Subquery 
-- Matches department and job title with a specific manager
SELECT employee_name
FROM employees
WHERE (department_id, job_title) = (SELECT department_id, job_title FROM managers WHERE manager_id = 1);

Subconsultas de tabela (tabelas derivadas)

As subconsultas de tabela, ou tabelas derivadas, retornam uma tabela completa de várias linhas e colunas. Elas são comumente usadas na cláusula FROM como uma tabela temporária em uma consulta.

Por exemplo, a subconsulta abaixo cria uma tabela derivada de salários médios por departamento, que é então usada na consulta externa para encontrar departamentos com um salário médio acima de um limite especificado.

-- Example of Table Subquery 
-- Uses derived table for average department salary comparison
SELECT dept_avg.department_id, dept_avg.avg_salary
FROM 
    (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id) AS dept_avg
WHERE dept_avg.avg_salary > 50000;

Entendendo as subconsultas SQL

Nos exemplos acima, vimos que uma subconsulta é colocada entre parênteses. Vamos agora explorar a mecânica de uma subconsulta, incluindo sua sintaxe e ordem de execução.

Sintaxe e estrutura

A sintaxe de uma subconsulta varia dependendo de onde ela é usada na instrução SQL principal, como nas cláusulas SELECT, FROM ou WHERE. Normalmente, as subconsultas são colocadas entre parênteses ( ), indicando uma consulta separada. 

O exemplo a seguir demonstra uma subconsulta em uma cláusula WHERE, o que nos permite filtrar dados na consulta principal com base nos resultados de uma consulta aninhada. 

-- Selects the main column to retrieve from the main table to query
SELECT column_name
FROM table_name
-- Applies a condition to filter rows based on the subquery result
WHERE column_name operator 
      -- Subquery retrieves data for comparison in the WHERE clause
      (SELECT column_name FROM table_name WHERE condition);  

Ordem de execução

A ordem de execução das subconsultas depende do fato de elas serem correlacionadas ou não correlacionadas.

Subconsultas não correlacionadas

As subconsultas não correlacionadas são independentes da consulta externa e são executadas primeiro. O resultado da subconsulta é então passado para a consulta externa. As subconsultas não correlacionadas são comumente usadas para cálculos e filtros escalares ou em nível de coluna.

A consulta abaixo segue a ordem de execução:

  • A subconsulta (SELECT AVG(salary) FROM employees) é executada primeiro e calcula o salário médio.

  • A consulta externa recupera os funcionários cujo salário é maior que essa média.

-- Retrieves names of employees with above-average salary
SELECT employee_name  
FROM employees
-- Subquery: calculates average salary across all employees
WHERE salary > (SELECT AVG(salary) FROM employees);  

Recomendo que você faça o curso de Introdução ao SQL Server da DataCamp para saber mais sobre agrupamento e agregação de dados, além de unir tabelas.

Subconsultas correlacionadas

As subconsultas correlacionadas dependem da consulta externa para alguns de seus dados, portanto, são reavaliadas para cada linha processada pela consulta externa. 

A consulta a seguir é executada nessa ordem:

  • Para cada linha em employees (com o pseudônimo e1), a subconsulta (SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e1.department_id) calcula o salário médio para esse departamento específico.

  • Em seguida, a consulta externa compara o salário de cada funcionário com o salário médio do departamento e inclui apenas aqueles que ganham mais.

-- Retrieves names of employees with above-average salary in their department
SELECT e1.employee_name  
FROM employees e1
 -- Subquery: calculates average salary for each department
WHERE e1.salary > (SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e1.department_id); 

Aplicativos da subconsulta SQL

As subconsultas SQL são importantes para a recuperação e a transformação de dados, permitindo que você escreva consultas complexas e lide com tarefas avançadas de análise de dados. A seguir, você encontrará aplicações reais de subconsultas no gerenciamento de bancos de dados.

Filtragem de dados

As subconsultas são úteis para filtrar dados com base em condições dinâmicas, especialmente quando a filtragem exige a comparação de valores em várias tabelas ou a realização de cálculos.

A subconsulta a seguir recupera o endereço category_id de "Product A" e a consulta principal encontra todos os produtos dessa categoria.

-- Retrieves names of products in the same category as 'Product A'
SELECT product_name  
FROM products
 -- Subquery: finds category ID of 'Product A'
WHERE category_id = (SELECT category_id FROM products WHERE product_name = 'Product A'); 

Agregação de dados

As subconsultas também são usadas para agregação de dados, especialmente ao gerar estatísticas resumidas ou insights para relatórios e análises. A subconsulta (SELECT department_id, AVG(sales) AS avg_sales FROM sales GROUP BY department_id) calcula a média de vendas por departamento. A consulta externa filtra os departamentos com uma média de vendas acima de 50.000. 

-- Retrieves department IDs and their average sales
-- Filters for departments with average sales over 50,000
SELECT department_id, avg_sales  
FROM (SELECT department_id, AVG(sales) AS avg_sales FROM sales GROUP BY department_id) AS dept_sales  -- Subquery: calculates average sales per department
WHERE avg_sales > 50000;  

Considerações sobre desempenho e práticas recomendadas

Embora as subconsultas sejam poderosas ao escrever consultas complexas, elas podem afetar o desempenho, especialmente ao trabalhar com grandes conjuntos de dados. É importante considerar as armadilhas comuns e as práticas recomendadas para melhorar o desempenho.

Otimização do desempenho das subconsultas

A otimização do desempenho das subconsultas garante melhor tempo de execução da consulta e capacidade de resposta do banco de dados. A seguir, você encontrará maneiras de otimizar a subconsulta.

  • Índice Colunas relevantes: Para acelerar a recuperação de dados, certifique-se de que as colunas usadas nas cláusulas WHERE e JOIN e nas operações de comparação sejam indexadas.

  • Limite o uso de subconsultas correlacionadas: Sempre que possível, use operações JOIN ou CTEs em vez de subconsultas correlacionadas, pois elas podem processar dados mais rapidamente usando operações de conjunto em vez de processamento linha por linha.

  • Limitar o número de colunas em subconsultas: Selecione somente as colunas de que você precisa nas subconsultas para minimizar a recuperação de dados, reduzir o uso de memória e permitir que o banco de dados otimize a execução.

  • Use EXISTS em vez de IN: Se uma subconsulta retornar um conjunto de dados grande, você poderá usar EXISTS em vez de IN para melhorar o desempenho. O operador EXISTS interromperá o processamento da consulta quando encontrar uma linha correspondente, enquanto o operador IN continuará a avaliar todo o resultado da subconsulta.

Como evitar armadilhas comuns

Se você escrever subconsultas incorretamente, poderá ter problemas ao executá-las. Vamos ver como você pode evitar essas armadilhas.

  • Evite subconsultas correlacionadas desnecessárias: As subconsultas correlacionadas consomem muitos recursos, portanto, evite usá-las quando o resultado puder ser obtido com uma subconsulta não correlacionada ou com uma união.

  • Tenha cuidado com os valores NULL em subconsultas: os valores NULL podem levar a resultados inesperados, especialmente em subconsultas que usam operadores de comparação como IN ou =. Para evitar erros, considere usar COALESCE para lidar com nulos ou garantir que as colunas não sejam anuláveis se usadas para comparações.

  • Evite usar SELECT * em subconsultas: O uso do SELECT * pode levar a ineficiências, pois ele recupera todas as colunas, mesmo que você não precise delas. Isso aumenta o uso da memória e pode retardar a execução da consulta, especialmente com grandes conjuntos de dados.

  • Use apelidos significativos: Nomeie claramente suas tabelas e subconsultas para melhorar a legibilidade.

Experimente o nosso curso de carreira de Desenvolvedor do SQL Server, que equipará você com as habilidades para escrever, solucionar problemas e otimizar suas consultas usando o SQL Server. 

Técnicas de subconsulta SQL mais avançadas

Embora as subconsultas ofereçam uma maneira eficiente de escrever consultas complexas, existem métodos avançados para lidar com dados hierárquicos. Vamos examinar as técnicas e estratégias avançadas para aplicar subconsultas SQL.

Subconsultas recursivas

As subconsultas recursivas (também conhecidas como expressões recursivas de tabela comum ou CTEs) permitem que você recupere dados hierárquicos, como estruturas organizacionais, categorias de produtos ou relações baseadas em gráficos, em que cada item dos dados está vinculado a outro.

Suponha que você tenha uma tabela employees com employee_id, manager_id e employee_name. Você deseja recuperar a hierarquia de funcionários de um gerente específico.

WITH RECURSIVE EmployeeHierarchy AS (
    -- Anchor Query: Start with the specified manager
    SELECT employee_id, manager_id, employee_name, 1 AS level
    FROM employees
 -- Assuming the top-level manager has NULL as manager_id
    WHERE manager_id IS NULL 
    
    UNION ALL
    
    -- Recursive Query: Find employees who report to those in the previous level
    SELECT e.employee_id, e.manager_id, e.employee_name, eh.level + 1
    FROM employees e
    INNER JOIN EmployeeHierarchy eh ON e.manager_id = eh.employee_id
)
SELECT * FROM EmployeeHierarchy;

Na consulta acima:

  • O que chamo de Anchor Query seleciona o gerente de nível superior (onde manager_id é NULL).

  • A Consulta Recursiva se junta a employees com o próprio CTE (EmployeeHierarchy), encontrando funcionários que se reportam a cada funcionário recuperado anteriormente.

  • A recursão continua até que não haja mais funcionários que se reportem aos encontrados.

Combinação de subconsultas com outros recursos do SQL

Você pode integrar subconsultas a outros recursos do SQL, como funções de janela, instruções CASE e funções de agrupamento. Essas combinações permitem a manipulação avançada de dados e a geração de relatórios mais abrangentes.

Combinação de subconsultas com funções de janela

As subconsultas podem ser usadas para refinar o conjunto de dados em que as funções de janela atuam, o que as torna úteis para classificação, totais cumulativos e médias móveis. Suponha que você queira classificar os produtos por vendas em cada região. Você pode usar uma subconsulta para selecionar os dados relevantes e, em seguida, aplicar uma função de janela para classificação.

 -- Ranks products by sales within each region
SELECT region, product_id, sales, 
       RANK() OVER (PARTITION BY region ORDER BY sales DESC) AS sales_rank 
-- Subquery: calculates total sales per product in each region
FROM (SELECT region, product_id, SUM(sales) AS sales  
      FROM sales_data
      GROUP BY region, product_id) AS regional_sales;

Uso de subconsultas com instruções CASE

A combinação de subconsultas com os comandos CASE pode ajudar você a aplicar condições complexas com base em cálculos dinâmicos. A consulta a seguir classifica os produtos como de "alto", "médio" ou "baixo" desempenho com base em suas vendas em relação à média de vendas de sua categoria.

 -- Categorize above-average sales, average sales, and below-average sales
SELECT product_id, category_id, sales,
       CASE 
           WHEN sales > (SELECT AVG(sales) FROM products WHERE category_id = p.category_id) THEN 'High' 
           WHEN sales = (SELECT AVG(sales) FROM products WHERE category_id = p.category_id) THEN 'Medium' 
           ELSE 'Low'
       END AS performance
FROM products AS p;

Subconsultas com funções de agregação para agregação condicional

Você também pode calcular agregados condicionais usando subconsultas dentro de funções de agregação. Suponha que você queira calcular a receita total gerada somente pelos clientes ativos. No exemplo abaixo, a subconsulta recupera todos os clientes ativos. Em seguida, a consulta principal filtra os pedidos para incluir apenas aqueles feitos por clientes ativos, calculando a receita total desse grupo.

 -- Calculates total revenue from active customers
SELECT SUM(order_total) AS active_customer_revenue 
FROM orders
  -- Subquery: retrieves IDs of active customers
WHERE customer_id IN (
    SELECT customer_id
    FROM customers
    WHERE status = 'Active'
);

Quando as subconsultas SQL são usadas

As subconsultas SQL oferecem aplicativos versáteis do mundo real para análise de dados, e é por isso que são usadas com tanta frequência. A seguir, você encontrará algumas aplicações matemáticas ou específicas do setor das subconsultas SQL. Para ter essas ideias, tentei pensar em trabalhos de análise de dados ou engenharia de dados que exigem várias etapas, que é, na minha opinião, onde as subconsultas realmente ajudam.

Exemplos específicos do setor

As subconsultas podem oferecer soluções úteis nos setores financeiro, de saúde e de varejo. Aqui estão algumas ideias:

  • Avaliação de risco para aprovações de empréstimos (Finanças): Imagino os bancos fazendo malabarismos com métricas como índices de dívida e renda e pontuações de crédito. Ao aninhar essas métricas em subconsultas, os analistas podem entender melhor as métricas financeiras complicadas. Talvez uma subconsulta possa calcular o valor médio do empréstimo para clientes dentro de faixas de renda específicas.

  • Identificação de padrões em diagnósticos de pacientes (assistência médica): No setor de saúde, gerenciar os dados dos pacientes pode ser um grande trabalho. As subconsultas podem ajudar a reduzir essa complexidade. Imagino que você possa usar subconsultas para rastrear as frequências de diagnóstico em diferentes faixas etárias ou fatores de risco.

  • Otimização da colocação de produtos com base no histórico de compras (varejo): Os varejistas prosperam ao entender os padrões de compra. As subconsultas podem mostrar dados de compra aninhados para identificar quais produtos são comprados juntos com frequência. Isso pode ajudar a posicionar estrategicamente itens complementares e aumentar as vendas.

Conexões matemáticas

As subconsultas também são usadas para identificar padrões e tendências de dados em conexões matemáticas e lógicas. A seguir, você verá alguns cenários em que as subconsultas são aplicadas em matemática.

  • Médias móveis para análise de séries temporais: Ao analisar tendências ao longo do tempo, as subconsultas simplificam o cálculo das médias móveis. Vejo que eles definem janelas de tempo específicas em consultas aninhadas, facilitando a suavização dos dados e a identificação de tendências.

  • Detecção de outliers usando desvios padrão: Identificar exceções é importante para muitas coisas, inclusive para a detecção de fraudes. As subconsultas facilitam o cálculo de métricas computadas, como desvios padrão, em consultas aninhadas.

  • Usando conceitos de teoria de conjuntos: Acho interessante como as subconsultas espelham operações de teoria de conjuntos como UNION e INTERSECT. Esse recurso é perfeito para tarefas como a análise de retenção de clientes, em que a compreensão das sobreposições e diferenças entre os grupos de clientes pode impulsionar estratégias de marketing mais inteligentes.

Conclusão

O domínio das subconsultas SQL pode aumentar significativamente sua capacidade de gerenciar e analisar dados com eficiência. Ao compreender sua estrutura, seus aplicativos e suas práticas recomendadas, você pode otimizar suas consultas SQL para obter um melhor desempenho. Além disso, quero dizer que dominar as subconsultas facilita a escrita de SQL, portanto, vale a pena aprender.

Se você estiver interessado em se tornar um analista de dados proficiente, confira nosso curso de carreira Associate Data Analyst in SQL para aprender as habilidades necessárias. O curso Reporting in SQL também é adequado se você quiser aprender a criar painéis profissionais usando SQL. Por fim, recomendo que você obtenha a certificação SQL Associate para demonstrar que domina o uso do SQL para análise de dados e se destacar entre outros profissionais de dados.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Eu crio artigos que simplificam a ciência e a análise de dados, tornando-as fáceis de entender e acessíveis.

Perguntas frequentes sobre subconsultas SQL

O que é uma subconsulta SQL?

Uma subconsulta SQL é uma consulta aninhada em outra consulta SQL, usada para realizar operações que exigem várias etapas ou lógica complexa.

Como você usa uma subconsulta no SQL?

As subconsultas são usadas em instruções SQL para filtrar dados, realizar cálculos ou recuperar informações específicas com base em condições complexas.

Quais são os tipos de subconsultas no SQL?

As subconsultas SQL podem ser categorizadas em subconsultas escalares, de coluna, de linha e de tabela, cada uma servindo a diferentes propósitos na recuperação de dados.

Qual é a diferença entre uma subconsulta e uma junção?

Uma subconsulta é uma consulta aninhada usada para operações complexas, enquanto uma união combina linhas de duas ou mais tabelas com base em colunas relacionadas.

Como as subconsultas podem melhorar o desempenho das consultas SQL?

As subconsultas podem simplificar consultas complexas, dividindo-as em partes menores e gerenciáveis, o que pode melhorar o desempenho quando usadas corretamente.

Temas

Aprenda SQL com a DataCamp

curso

Introduction to SQL

2 hr
976.3K
Learn how to create and query relational databases using SQL in just two hours.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

Um guia abrangente para a certificação SQL no DataCamp

Explore a certificação SQL com os cursos e tutoriais da DataCamp. Adquira habilidades práticas e conhecimento teórico para se destacar na análise de dados e avançar em sua carreira.
Matt Crabtree's photo

Matt Crabtree

8 min

tutorial

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

9 min

tutorial

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Tutorial do MySQL: Um guia abrangente para iniciantes

Descubra o que é o MySQL e como começar a usar um dos sistemas de gerenciamento de banco de dados mais populares.
Javier Canales Luna's photo

Javier Canales Luna

15 min

tutorial

Tutorial de visão geral do banco de dados SQL

Neste tutorial, você aprenderá sobre bancos de dados em SQL.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

SELEÇÃO de várias colunas no SQL

Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
DataCamp Team's photo

DataCamp Team

3 min

Ver maisVer mais