Ubuntu Para Iniciantes

POSTGRES – SUB-SELECT NA CLAUSULA FROM

Em um outro tópico escrevi como gerar um gráfico a partir de uma base de dados utilizando o postgres e o phplot. 

Nessa base de dados havia apenas duas tabelas que criei, não me preocupei com alguns critérios de normalização por se tratar de um foco diferente para o tutorial.

POSTGRES – SUB-SELECT CRIANDO CONSULTAS COM TABELAS VIRTUAIS NA CLAUSULA FROM (SUBSELECT)

Mas achei importante falar sobre um recurso muito bem empregado pela linguagem de SQL, mais precisamente no banco de dados POSTGRESQL.

São as sub-selects ou sub-querys. As sub-selects são consultas efetuadas dentro de uma consulta principal para que se possa obter um melhor aproveitamento do motor de busca do banco de dados.


Nesse tutorial será apresentado a query elaborada para buscar os dados das tabelas anteriormente utilizadas para a gerar a tabulação dos dados.

A sub-select elaborada está junto com a clausula FROM da instrução SQL.

As tabelas são as seguintes:

Vendedores e Valores

Nota: para efeitos didáticos não houve preocupação em questões de normalização do banco de dados.
 
Na tabela Vendedores há os respectivos nomes dos vendedores e na tabela de valores seria o lançamentos das vendas dos períodos do mês de janeiro até março.

1 - Tabela de Vendedores:

sub-select-postgresql
Resultado da Consulta da Tabela dos Vendedores





2 – Tabela de Valores
usando o postgres para criar tabelas temporarias com subselect
RESULTADO DA CONSULTA DA TABELA DOS VALORES DE VEDAS
A necessidade é agrupar as informações de cada vendedor, por mês, sendo Janeiro, Fevereiro e Março. Mostrando no resultado o que cada um vendeu em cada cada mês.

Bem, poderia fazer 3 consultas distintas e fazer com que o PHP agrupasse todas as informações. Mas pensei em otimizar o código e deixar o motor de busca do POSTGRES trabalhar um pouco mais. Foi utilizada então o recurso de sub-select na clausula FROM da instrução SQL.

O resultado é este abaixo:

subselect utilizando postgresql banco de dados
Resultado da Sub-Select apresentando o resultado de cada vendedor por mês


Agora a instrução SQL que deu origem ao resultado da consulta.

INSTRUÇÃO SQL MONTANDO A CONSULTA COM O SUBSELECT COM O BANCO DE DADOS

Logo abaixo você poderá verificar, estudar e copiar a instrução SQL para entender melhor como que a consulta foi construída e posteriormente gerada pelo SGDB.

/*mes de Janeiro*/

select p.vennome, sum(v.valvalor) as Janeiro, mesFev.mes2 as Fevereiro, mesMar.mes3 as Março from blog.vendedores as p, blog.valores as v ,

/*mes de Fevereiro*/

( select a.vencodigo, sum(b.valvalor) as mes2 from blog.vendedores as a, blog.valores as b

where

a.vencodigo = b.vencodigo and
b.valmes =2
group by a.vencodigo

) as mesFev ,

/*mes de Março*/

( select a.vencodigo, sum(b.valvalor) as mes3 from blog.vendedores as a, blog.valores as b

where

a.vencodigo = b.vencodigo and
b.valmes =3
group by a.vencodigo

) as mesMar

where /* clausula where da sql central */

p.vencodigo = v.vencodigo and
p.vencodigo = mesFev.vencodigo and
p.vencodigo = mesMar.vencodigo and
v.valmes =1

group by p.vennome, mesFev.mes2, mesMar.mes3

CONCLUSÃO SOBRE A CONSULTA DO SUBSELECT


É importante perceber que na clausula WHERE estão os devidos relacionamentos entre as subselects. Isso para que os dados sejam agregados corretamente conforme cada consulta.

Há uma instrução central, que busca o resultado do mês de Janeiro, que nela contém, por meio da clausula FROM, as subselects para o mês de Fevereiro e Março.

Os subselects criam uma espécie de TABELAS TEMPORÁRIAS que recebem ÁLIAS ou APELIDOS para serem referenciados na query central. Estes apelidos são mesFev e mesMar. Sendo assim os dados que forem trazidos pela subselect pode ser referenciado na select central por meio de seus apelidos e campos.

Veja o código separado da busca do mês de Fevereiro:
…, ( select a.vencodigo, sum(b.valvalor) as mes2 from blog.vendedores as a, blog.valores as b

where
 

a.vencodigo = b.vencodigo and
b.valmes =2
group by a.vencodigo
) as mesFev ,...

É importante lebrar que para cada campo de busca que não estiver em uma função agregadora, como é o caso da função SUM(), o campo deverá estar junto a clausula GROUP BY.


Você poderá gostar de ver estas outras publicações aqui no Blog:

Outro ponto importante é que para cada subselect que estiver na clausula FROM, este subselect será tratado como uma nova “tabela” de consulta, devendo haver um apelido para referencia-la.

Espero que tenha gostado deste post. Deixe seu comentário logo abaixo com suas críticas e sugestões. Assine também a lista de e-mails e receba cada nova postagem eu sua caixa de e-mail. Seja bem vindo ao Blog Ubuntu Para Iniciantes. Abraços.
POSTGRES – SUB-SELECT NA CLAUSULA FROM Reviewed by Ubuntu para Iniciantes Marcelo Weihmayr on 14:56:00 Rating: 5

Nenhum comentário :

Olá, faça seu comentário com sugestões, dicas ou críticas

Powered By Blogger , Designed by Sweetheme

Formulário de contato

Nome

E-mail *

Mensagem *

Marcelo Weihmayr. Tecnologia do Blogger.