Hoje fiz uma aula completa de subqueries para você! Nesta aula vou explicar o que é o subqueries, para que serve e resolver 5 exercícios!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala Impressionadores! Hoje nós vamos ter uma aula completa de Subqueries no SQL!
Não sabe o que é subqueries, ou ainda não tem o PostgreSQL instalado? Pode ficar tranquilo que eu vou te ensinar o que é e como você vai poder instalar esse SGBD.
Para essa aula nós vamos fazer Subqueries no PostgreSQL com o banco de dados Northwind.
Depois disso vou fazer com você 5 exemplos de subqueries para que você veja na prática como utilizar esse conhecimento!
E aí, bora aprender mais sobre Subquery no SQL? Então vem comigo que eu vou te ensinar!
Por que o Subqueries é importante no SQL?
Saber subqueries é importante porque ele otimiza os processos do SQL, é possibilita colocar uma consulta dentro de outra consulta.
Subqueries podem ser utilizadas nas cláusulas WHERE, HAVING, FROM e SELECT, vamos fazer aqui alguns exemplos de como aplicar no nosso banco de dados:
1. Cláusula WHERE
SELECT
*
FROM tabela
WHERE coluna = (SELECT);
Observe que estamos fazendo o uso do SELECT como um filtro, ele vai retornar um valor que pode ser usado em uma consulta.
2. Cláusula FROM
SELECT
*
FROM (SELECT) t;
A cláusula FROM é a possibilidade que temos de selecionar uma tabela, como o SELECT também pode retornar uma tabela então podemos usar dentro dos parênteses e informar em seguida um nome para esta tabela.
3. Cláusula SELECT
SELECT
*,
(SELECT)
FROM tabela;
Neste caso usamos o SELECT dentro do SELECT para o caso de querer usar o resultado do primeiro SELECT em uma nova coluna.
4. Cláusula HAVING
SELECT
coluna,
COUNT(*)
FROM tabela
GROUP BY coluna
HAVING COUNT(*) >= (SELECT);
O HAVING é outra possibilidade de filtrar, utilizamos para filtrar dados agrupados, neste caso vamos selecionar a coluna, fazer uma contagem dos valores agrupando pela coluna e depois comparar com o SELECT. Essas são as maneiras que temos de utilizar subqueries!
Exemplos práticos:
Exemplo 1: Quais produtos têm um preço acima da média?
Vamos trabalhar com o banco de dados Northwind, este é um banco de dados de exemplo.
Caso você não tenha assista à aula sobre a instalação do PostGreSQL que preparei aqui no blog.
Bom, para sabermos quais produtos tem o preço acima da média precisamos primeiro saber a média e também em que arquivo temos esta informação. Neste banco de dados essas informações estão no arquivo chamado Products.
select * from products;
select avg(unit_price) from products;
Selecione e rode o código, vamos ter como média da coluna o valor de -> 28.83 (valor arredondado). Agora que sabemos a média vamos fazer um código que seleciona apenas os produtos que estão acima deste valor.
select * from products
where unit_price >= (select avg(unit_price) from products);
Pronto, dessa forma a pesquisa está sendo feita de foram automática!
Subquery: Cláusula WHERE
Exemplo 2: Quais pedidos têm uma quantidade vendida acima da quantidade vendida média?
O procedimento para fazer esta análise é o mesmo, primeiro vamos buscar a média e ver se existe uma tabela com essas informações.
Neste caso as informações estão na tabela order_details.
Como temos pedidos com a mesma identificação, ou seja, as linhas não são cada uma um pedido diferente, o ideal é fazer uma média por pedido para obtermos o valor correto (vamos fazer no próximo exercício), nesta questão, para simplificarmos, vamos considerar que em cada linha temos um pedido.
Select * from order_details
where quantity >= (select avg(quantity) from order_details);
Subquery: Cláusula FROM
Exemplo 3: Qual é a média geral de quantidade vendida por pedidos?
Neste caso vamos fazer a média por pedido, por isso vamos fazer o agrupamento de cada pedido identificando pelo -> order_id.
Feito isso, podemos tirar a média.
Select * from order_details;
Select
avg(total_vendido)
From (
select
order_id,
sum(quantity) total_vendido
from order_details
group by order_id) t;
Subquery: Cláusula SELECT
Exemplo 4: Faça uma consulta à tabela products e adicione uma coluna que contenha a média geral de preço dos produtos.
select
*,
(select avg(unit_price) from products) media_precos
from products;
Exemplo 5 (Corrigindo o exemplo 2): Quais pedidos têm uma quantidade vendida acima da quantidade vendida média (correta)?
Nós já calculamos a quantidade vendida média no exercício 3, vamos usar o mesmo cálculo, pegar o resultado da média real e retornar os valores dos produtos acima da média.
select * from order_details;
select
order_id,
sum(quantity)
from order_details
group by order_id
having sum(quantity) >= (
select
avg(total_vendido)
from (
select
order_id,
sum(quantity) total_vendido
from order_details
group by order_id) t);
Sempre que vamos filtrar depois do agrupamento pronto, devemos usar o having, dessa forma vamos ter como resposta os valores acima da média sem repetição.
Você já sabia como aplicar subqueries com WHERE, FROM, SELECT e HAVING? Nesta aula trouxe 5 exercícios resolvidos sobre pesquisas em banco de dados.
Utilize esta aula para treinar modos de solucionar problemas, recomendo que baixe o material e tente resolver as questões.
Temos também uma aula com dicas de como melhorar suas análises de dados e tomada de decisão!
Eu fico por aqui! Até a próxima! Um abraço,
Para acessar outras publicações de SQL, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.