Blog

Postado em em 5 de maio de 2023

Aula Completa de Subqueries no PostgreSQL

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!

exemplo
exemplo

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.

Conclusão – Aula Completa de Subqueries no PostgreSQL

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,

Hashtag Treinamentos

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


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

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador