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;
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;
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);
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;
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.
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';
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');
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;
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.
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!
Posts mais recentes de SQL
- 5 Boas Práticas de SQL para Iniciantes: Otimize Suas Consultas e Organize Seu CódigoSe você está começando com MySQL ou busca melhorar suas habilidades em SQL, este post traz cinco boas práticas de escrita de SQL para iniciantes.
- 5 Verdades Sobre SQL que Você Provavelmente Não SabiaVocê sabia que o SQL é uma das habilidades mais valiosas no mundo dos dados? Neste post revelamos 5 verdades sobre o SQL que provavelmente você não conhecia.
- 5 Mitos sobre SQL que Você Deve Abandonar para Dominar a Linguagem!Você já deve ter ouvidos alguns mitos sobre SQL: que ele é ultrapassado, difícil ou só para especialistas em banco de dados.
Posts mais recentes da Hashtag Treinamentos
- Função SE Excel: Exemplos e Dicas para Uso [Guia]A função SE Excel é muito útil para definir condições e criar uma planilha mais completa e funcional. Confira nesta aula!
- Exercícios de Listening em Inglês – Como Melhorar sua CompreensãoFaça estes exercícios de listening em inglês e melhore sua compreensão! Descubra técnicas e estratégias para praticar e evoluir no aprendizado do idioma!
- TCP e UDP: o que são, diferenças e quando usarEntenda o que é TCP e UDP, as diferenças entre os protocolos, suas vantagens e quando usar cada um. Aprenda com exemplos práticos e linguagem acessível.
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.