🎉 SEMANA DO CONSUMIDOR

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

Ver detalhes

Postado em em 13 de setembro de 2022

Quer saber como otimizar consultas no SQL com subqueries? Então vem comigo que eu vou te ensinar como fazer isso!

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

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Filtros em Bancos de Dados

Antes de entrar na otimização de consultas no SQL dentro do MySQL eu quero te mostrar como utilizar filtros em bancos de dados para que você entenda depois como otmizar esse processo.

Vamos supor que você queira obter os produtos que possuem o preço unitário maior do que a média de preço entre esses produtos.

select * from produtos;
where Preco_Unit >= 1788.125;
order by Preco_unit;

select avg(Preco_Unit) from produtos; --1788.12

Nesse código estamos primeiramente selecionando todas as colunas da base produtos e logo em seguida já estamos aplicando o filtro para trazer apenas as informações que possuem um preço unitário maior do que a média.

Neses caso utilizamos o comando que está na última linha para encontrar esse valor da média, dessa forma você pode aplicar no filtro.

Por fim, ainda temos um comando order by só para filtrar as informações de preço unitário para que a visualização fique mais fácil.

Filtros em bancos de dados

Otimizar Consultas no SQL com Subqueries

Como você deve ter notado, essa consulta que nós fizemos vai funcionar só enquanto a base de dados continuar com as mesmas informações, não é mesmo?

Pois se atualizarmos ou adicionarmos novas informações, a nossa média já será alterada, só que no nosso código, nós pegamos a média e escrevemos de forma manual dentro do nosso filtro.

Isso não é algo muito interessante, pois queremos que essa média seja automática e atualize o nosso filtro sempre, então podemos fazer essa otimização com subqueries!

select * from produtos;
where Preco_Unit >= (select avg(Preco_Unit) from produtos);
order by Preco_unit;

Você vai notar que esse ajuste é muito simple, vamos pegar a informação que fazia o cálculo da média para colocar dentro do nosso filtro, assim você não precisa escrever de forma manual.

E ainda vai garantir que as informações estarão sempre atualizadas!

Se ainda estiver com dúvidas vou explicar com um pouco mais de detalhe o que é uma subquery e dar mais um exemplo para que fique bem claro! Mas é bem simples, vamos simplesmente automatizar o processo ao invés de pegar o valor e inserir de forma manual dentro do filtro.

O Que é uma Subquery no SQL

Uma subquery é um recurso dentro do SQL que permite a criação de queries mais otimizadas, reaproveitando o resultado de uma query dentro de outra query,

Agora o que é esse tal de query? Isso nada mais é do que uma consulta em um banco de dados.

Então quando você quer consultar qual é a soma de salário, ou quer saber quais os funcionários de um determinado setor… Isso tudo é uma consulta (query).

A ideia é que com a subquery nós vamos poder reaproveitar esse resultado em outro local para facilitar e otimizar o processo.

Podemos utilizar as subqueries em 3 situações:

  1. Dentro da cláusula WHERE, como um filtro;
  2. Dentro da cláusula SELECT, como uma nova coluna;
  3. Dentro da cláusula FROM, como uma nova tabela.

Para que isso não fique muito abstrato nós vamos usar um exemplo, assim fica mais fácil de entender.

Exemplo: Quais funcionários recebem um salário acima da média de todos os funcionários?

  • 1º Passo – Descobrir a média de salário
  • 2º Passo – Filtrar a tabela EMPLOYEES baseado no valor acima

Nesse primeiro exemplo vamos calcular quantos funcionários recebem acima da média. Então a ideia é primeiramente descobrir qual é essa média de salário para que possamos utilizar essa informação para filtrar a nossa tabela de funcionários.

Vamos fazer a seleção das informações com o SELECT * FROM employees, que pode ser feito logo antes do primeiro passo.

-- 1º Passo - Descobrir a média de salário
SELECT AVG(salary) FROM employees; -- 6593,59

-- 2º Passo - Filtrar a tabela EMPLOYEES baseado no valor acima.
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

Aqui você deve ter notado que o que estamos fazendo é basicamente pegar o cálculo que fizemos da média e jogando dentro do filtro WHERE.

Então ao invés de calcular o valor e depois colocar o número, nós vamos utilizar esse mesmo cálculo dentro do WHERE para que fique um cálculo dinâmico.

Obs.: Dessa forma você não precisa pegar esse número e colocar dentro do seu cálculo de forma manual. Esse valor fica automático, até porque se os salários forem alterados, esse valor de média também será alterado de forma atuomática!

Então quando a sua base de dados for alterada esse cálculo também será alterado, pois ele já faz o cálculo da média salarial da tabela.

Então nos seus próximos cálculos você já sabe que pode utilizar o resultado de uma consulta em outra query seguindo esse padrão.

Se tiver dificuldades no início pode separar por partes que nem fizemos no exemplo, depois você junta até que isso se torne natural.

O objetivo é facilitar o processo sem que você tenha que fazer esse procedimento de forma manual, se já tem uma forma de fazer um cálculo, porque não utilizar esse cálculo automático no restante do seu código!

Conclusão – Otimizar Consultas no SQL com Subqueries

Nessa aula eu te mostrei como fazer a criação de códigos mais otimizados no SQL utilizando as subqueries.

Que nada mais são do que consultas dentro de outras consultas, então você pode colocar um cálculo dentro de outro cálculo para otimizar seu código e ter que escrever menos linhas de código.

Além disso, não precisa visualizar e inserir esse resultado de forma manual nas outras partes do seu código, até porque a ideia é otimizar e automatizar esses processos.

Não faz sentido ter um código fazendo todo um processo se você tem que toda hora fazer um cálculo que pode inserir dentro do código e facilitar tudo, não é mesmo?

Leia também sobre: Trigger no SQL – Para que server e como funciona?

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 da Hashtag Treinamentos

Perfil Heitor

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