Subquery é uma consulta(select) dentro de outra ou várias consultas aninhadas uma dentro da outra. São muito úteis quando queremos fazer selects complexos que seriam muito complicados ou até mesmo impossíveis de serem feitos se não as empregássemos.

Observe no Projeto modelado para a "RedeFast", imagine a situação que o dono queira saber o faturamento que cada tipo de produto traz para a loja... 

Como poderíamos resolver essa situação?

Informações relevantes devem ser anotadas para facilitar a resolução do problema:

- A loja separa seus produtos por categoria, logo precisamos saber essas categorias para podermos utilizá-la como filtro e saber quanto cada categoria de produtos vendeu;

- Fomos requisitados a descobrir o faturamento de cada produto(categoria de prodtuo) então precisamos da soma das vendas referente a cada categoria, com isso necessitamos da soma de valores da tabela Vendas, mas não temos uma essa coluna com essa "soma", por isso utilizaremos a coluna 'preço' dentro da tabela Vendas que armazena quanto cada cliente gastou em determinada compra, sendo que cada venda só armazena um id_produto, se descobrirmo os id_produtos de cada categoria, conseuimos somar as vendas referente a cada categoria.

Fizemos uma resolução para celulares mas é só alterarmos o filtro do select interno para a categoria desejada e conseguirmos o faturamento de todos os produtos. Resolução:

select sum(preco) as faturamento_celulares from vendas
where id_produto in (select idproduto from produtos where categoria = 'celulares')

Explicação :
sum(preco) é o valor total vendido naquela venda, filtramos pelo id_produto que receberá o resultado vindo de outro select, este que tem a função de trazer o idproduto onde nesse caso é onde a categoria seja igual a 'celulares'.

O que acontece internamente é que o comando interno é executado primeiro, retornando nesse caso uma lista de idproduto, o select externo utilizará essa lista como parâmetro para somar as vendas.

Basicamente estamos dizendo "some os valores da coluna 'preco' apelidando essa coluna de 'faturamento_celulares' da tabela Vendas recebendo como parâmetro os idprodutos que são da categoria 'celulares' e estão contidos nessa lista, retorne essa valor para mim". O id_produto contido na tabela Vendas é o mesmo valor de idproduto da tabela Produtos, já que existe uma ligação de Foreign Key entre essas tabelas, Produtos sede sua chave para a tabela Vendas.

Observe o Modelo Lógico e a solução dos demais faturamentos requisitados.





Comentários

Postagens mais visitadas