🎉 SEMANA DO CONSUMIDOR

Últimos dias para comprar os cursos com 50% de desconto

Ver detalhes

Postado em em 30 de agosto de 2024

Conheça três tipos de subqueries no SQL que vão te ajudar nos seus próximos projetos e análises de dados.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Tipos de Subqueries no SQL – Escalar, Lista e Tabela

Na aula de hoje, vou te apresentar três tipos de subqueries no SQL que serão úteis em seus projetos: a subquery escalar e a subquery do tipo lista.

Primeiro, vou explicar o que são subqueries e, em seguida, mostrar como utilizar uma subquery escalar e uma subquery de lista.

Dessa forma, você poderá usar essas consultas para aprimorar ainda mais suas análises e projetos com bancos de dados, utilizando resultados de consultas anteriores dentro de novas consultas.

Isso facilita e agiliza seus processos, pois assim você não precisará refazer cálculos ou análises feitas anteriormente.

Curtiu esse tema? Quer aprender mais sobre os tipos de subqueries no SQL? Então vem comigo que eu vou te mostrar!

O que é uma Subquery?

Uma subquery é um recurso dentro do SQL que permite utilizar uma consulta dentro de outra.

Utilizando o resultado obtido com uma query como parte de outra query, você pode criar consultas mais otimizadas e práticas, agilizando seus processos de análise ao evitar a repetição de cálculos ou consultas já realizados.

Caso queira saber mais sobre como otimizar consultas no SQL utilizando subqueries, confira esta aula abaixo.

Nessa aula, vou te mostrar três tipos diferentes de subqueries que você pode aplicar em seus projetos: a escalar, a do tipo lista e do tipo tabela.

Subquery Escalar

Começando pela subquery escalar, essa consulta retorna exatamente um único valor (escalar). Esse valor pode ser utilizado em qualquer lugar da sua consulta onde um valor único é permitido.

Vamos ver isso com um exemplo prático. Dentro do meu banco de dados, tenho diversas tabelas com informações sobre produtos, vendas, lojas, clientes, etc. O objetivo será descobrir quais produtos têm um preço acima da média.

Para saber quais produtos têm o preço acima da média, precisamos primeiro calcular a média desses produtos. Podemos obter essa informação a partir da tabela produtos. Vamos começar selecionando e visualizando essa tabela.

SELECT * FROM produtos;
tabela produtos

A informação que desejamos obter é referente à média do preço unitário de cada produto. Para isso, podemos utilizar a função AVG passando como parâmetro a coluna preco_unit. Essa função retorna a média dos valores numéricos contidos nessa coluna.

SELECT AVG(preco_unit) FROM produtos;
Valor da média

Essa consulta retornará um único valor, o da média, que nesse caso é de 1788.1250.

Para exibir apenas os produtos com valores acima da média, poderíamos utilizar a cláusula WHERE para filtrar a coluna preco_unit dentro da nossa tabela onde o valor é maior ou igual a 1788.

Porém, dessa forma, se a média dos valores da nossa tabela fosse alterada, novos produtos fossem adicionados, ou alguns produtos fossem removidos, essa consulta ficaria desatualizada.

Com isso, precisaríamos realizar novamente a consulta para verificar a média e depois alterar a consulta para filtrar apenas os produtos acima dela.

Nesse caso, uma maneira mais eficiente e prática de realizar essa consulta é utilizando a subconsulta (subquery) da média como condição da cláusula WHERE dentro da consulta principal, onde queremos filtrar os produtos acima da média.

SELECT *
FROM produtos
WHERE preco_unit >= (SELECT AVG(preco_unit) FROM produtos);
filtrando apenas os produtos acima da média

Nesse caso, temos uma subquery escalar sendo utilizada como condição da cláusula WHERE e filtrando apenas os produtos acima da média.

Subquery de Lista

Além da subquery escalar, que retorna um único valor, temos também as subqueries do tipo lista, que retornam um conjunto de valores. Esse conjunto pode ser utilizado em cláusulas como IN, ANY ou ALL, por exemplo.

Vamos ver isso na prática com este segundo exemplo. Nosso objetivo será determinar quais vendas estão associadas a clientes do gênero masculino.

Se analisarmos a nossa tabela de vendas, veremos que não é possível identificar o gênero dos clientes apenas por essa tabela.

SELECT * FROM vendas;
Tabela vendas

Uma das formas de resolver isso seria trabalhar com essa consulta utilizando os JOINs. Mas, neste caso, faremos isso utilizando subqueries.

Para resolver isso, vamos usar a coluna com o ID do cliente para buscar informações adicionais na tabela de clientes, já que essas tabelas estão relacionadas.

Tabela de clientes

Para filtrar os IDs dos clientes do sexo masculino dentro da tabela de clientes, podemos selecionar a coluna id_cliente e utilizar a cláusula WHERE, especificando como condição que a coluna gênero tenha o valor ‘M’ (masculino).

SELECT id_cliente FROM clientes WHERE gênero = 'M';

tabela de uma única coluna com os IDs dos clientes do sexo masculino

Como resultado, temos uma lista, uma tabela de uma única coluna, com os IDs dos clientes do sexo masculino.

Agora, basta utilizarmos o operador IN para filtrar os valores da nossa tabela de vendas onde id_cliente for igual a um dos valores presentes na lista obtida com a nossa consulta anterior.

SELECT *
FROM vendas
WHERE id_cliente IN (SELECT id_cliente FROM clientes WHERE gênero = 'M');
filtrar os valores da tabela de vendas onde id_cliente for igual a um dos valores presentes na lista

Dessa forma, utilizamos a subquery de lista para filtrar as informações desejadas dentro da nossa outra consulta.

Aplicação Especial de Subqueries – Subquery do Tipo Tabela

Além das subqueries escalares e de lista, temos as subqueries que retornam uma tabela completa, com várias colunas e linhas, permitindo a extração de diversos dados importantes em uma única consulta.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Esse tipo de subquery pode ser usado como uma tabela temporária dentro de uma consulta maior, permitindo a realização de operações mais complexas e detalhadas.

Vamos entender isso com um exemplo prático. Suponha que você deseja analisar as vendas de produtos em sua base de dados, identificando o máximo, o mínimo e a média de vendas por produto. Para isso, podemos utilizar uma subquery de tabela.

Primeiro, a subquery interna agrupa (GROUP BY) as vendas por produto, utilizando o id_produto, e calcula o total de vendas para cada um, fazendo a contagem com a função COUNT().

O resultado dessa consulta interna será uma tabela com duas colunas: id_produto e total_vendas, onde cada linha representa um produto e o total de vendas associado a ele.

SELECT
    id_produto,
    COUNT(*) AS total_vendas
FROM
    vendas
GROUP BY id_produto;
Subquery tabela interna

A partir dessa tabela, construiremos a nossa subquery externa, onde usaremos esses dados para calcular o máximo (MAX), o mínimo (MIN) e a média (AVG) das vendas, a partir da coluna total_vendas, gerada na consulta interna.

Para que o SQL reconheça a consulta interna como uma tabela, precisamos defini-la entre parênteses e atribuir a ela um alias. Nesse caso, vou chamá-la de t, mas você pode nomeá-la de forma que faça mais sentido para a sua consulta.

SELECT
    MAX(total_vendas) AS maximo_vendas,
    MIN(total_vendas) AS minimo_vendas,
    AVG(total_vendas) AS media_vendas
FROM (
    SELECT
        id_produto,
        COUNT(*) AS total_vendas
    FROM vendas
    GROUP BY id_produto
) AS t;

Isso nos permite extrair informações agregadas importantes a partir dos dados agrupados, possibilitando que, em uma única consulta, obtenhamos três informações essenciais para a análise de dados.

Subqueries do tipo tabela

Dessa forma, a subquery de tabela é utilizada para realizar uma análise mais complexa, onde os resultados intermediários (neste caso, os totais de vendas por produto) são essenciais para o cálculo final de máximo, mínimo e média.

Essa é uma aplicação especial de subqueries que permite construir consultas SQL mais avançadas, extraindo diversas informações de maneira rápida e flexível.

Conclusão – Tipos de Subqueries no SQL – Escalar, Lista e Tabela

Nessa aula, você aprendeu como utilizar três tipos de subqueries no SQL que vão te ajudar em seus projetos e na construção de suas consultas: a subquery escalar, a subquery do tipo lista e a subquery do tipo tabela.

Você viu que a subquery escalar retorna um único valor e pode ser usada onde apenas um valor é esperado. Já a subquery de lista retorna um conjunto de valores e geralmente é usada com as cláusulas IN, ANY ou ALL.

Além disso, te mostrei como usar subqueries de maneira eficaz com as subqueries do tipo tabela, para otimizar consultas complexas e melhorar o desempenho de operações no banco de dados.

Essas subqueries são importantes e poderosas ferramentas que tornam suas consultas mais flexíveis, eficientes e práticas. Elas facilitam a manutenção e agilizam a execução de consultas mais complexas, tornando-as dinâmicas.

Caso queira aprender como aperfeiçoar ainda mais seus conhecimentos sobre consultas em SQL, otimizando seus códigos e se destacando no mercado de trabalho, confira nosso Curso Completo SQL Impressionador!

Hashtag Treinamentos

Para acessar outras publicações de SQL, clique aqui!


Quer aprender mais sobre SQL com um minicurso básico gratuito?

Posts mais recentes de SQL

Posts mais recentes da Hashtag Treinamentos

Diego Monutti

Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.