Você está na página 1de 6

TESTE PROGRAMADOR

Instruções:

- O teste é composto de 6 (seis) questões;

- As questões deverão ser respondidas nos espaços em branco;

- No término do teste, este deverá ser encaminhado via e-mail;

- Após recebimento do teste, ele será encaminhado para o Gestor da área de Desenvolvimento
para correção;

- Após a correção, a área de Gestão de Pessoas informará o resultado via e-mail;

- A continuidade no processo seletivo acontecerá mediante aprovação no teste.


O esquema de tabelas abaixo, será usado na resolução de algumas questões onde será
chamado de “Esquema modelo”.

Tabela: Clientes

Campo Tipo Chave Estrangeira para

Cliente* Int

Nome VarChar(50)

Estado VarChar(2)

Tabela: Produtos

Campo Tipo Chave Estrangeira para

Produto* Int

Codigo VarChar(15)

Descrição VarChar(150)

Tabela: VendasCab

Campo Tipo Chave Estrangeira para

Venda* Int

Codigo VarChar(15)

Data Date

Cliente Int Clientes

Tabela: VendasProd

Campo Tipo Chave Estrangeira para

VendasProd* Int

Venda Int VendaCab

Produto Int Produtos

Preco Numeric(15,7)

Quantidade Numeric(15,7)
1-) Utilizando o esquema modelo, escreva expressões em SQL para responder as perguntas
abaixo. A sintaxe deve ser compatível com Sqlserver ou Interbase/Firebird:

a) Como obter o total de vendas em valores por data da venda?

SELECT C.DATA , SUM(PRECO * QUANTIDADE) TOTAL FROM VENDASCAB C JOIN VENDASPROD


P ON P.VENDA = C.VENDA GROUP BY C.DATA;

b) Como obter o total das vendas em valores por data da venda e produto vendido?

SELECT PP.CODIGO, PP.DESCRICAO, C.DATA , SUM(PRECO * QUANTIDADE) TOTAL FROM


VENDASCAB C JOIN VENDASPROD P ON P.VENDA = C.VENDA JOIN PRODUTOS PP ON
P.PRODUTO = PP.PRODUTO GROUP BY PP .CODIGO, PP.DESCRICAO, C.DATA;

c) Como obter a contagem das vendas que possuem o produto com código “1000”?

SELECT PP.CODIGO, PP.DESCRICAO, SUM(QUANTIDADE) QTD FROM VENDASCAB C JOIN


VENDASPROD P ON P.VENDA = C.VENDA JOIN PRODUTOS PP ON P.PRODUTO = PP.PRODUTO
WHERE PP.CODIGO = “1000” GROUP BY PP.CODIGO, PP.DESCRICAO

d) Como obter o total das vendas em valores por estado, ordenado do maior valor para o
menor (ranking)?

SELECT CC.ESTADO , SUM(PRECO * QUANTIDADE) TOTAL FROM VENDASCAB C JOIN


VENDASPROD P ON P.VENDA = C.VENDA JOIN CLIENTES CC ON C.CLIENTE = CC.CLIENTE GROUP
BY CC.ESTADO ORDER BY SUM(PRECO * QUANTIDADE) DESC;
e) Como obter uma lista de códigos de produtos que venderam mais entre 01/01/2005 e
30/01/2005 do que sua média (do produto) de vendas total no ano de 2004?

SELECT PP.CODIGO, PP.DESCRICAO FROM VENDASCAB C JOIN VENDASPROD P ON P.VENDA =


C.VENDA JOIN PRODUTOS PP ON P.PRODUTO = PP.PRODUTO WHERE C.DATA BETWEEN
‘01/JAN/2005’ AND ‘30/JAN/2005’ AND SUM(QUANTIDADE) > (SELECT AVG(QUANTIDADE)
FROM VENDASCAB C1 JOIN VENDASPROD P1 ON P1.VENDA = C1.VENDA WHERE C1.DATA
BETWEEN ‘01/JAN/2004’ AND ‘31/DEC/2004’ AND P1.PRODUTO = PP.PRODUTO) GROUP BY
PP .CODIGO, PP.DESCRICAO;

f) Como obter uma lista de produtos onde o total das vendas geral é maior que R$
100.000,00?

SELECT PP.CODIGO, PP.DESCRICAO FROM VENDASCAB C JOIN VENDASPROD P ON P.VENDA =


C.VENDA JOIN PRODUTOS PP ON P.PRODUTO = PP.PRODUTO WHERE SUM(QUANTIDADE *
PRECO) > 100000 GROUP BY PP.CODIGO, PP.DESCRICAO

2-) Em sua opinião e baseado nas consultas SQL anteriores, quais campos deveriam ser
indexados no “esquema modelo”?

Tabela Clientes: Cliente e Estado

Tabela Produtos: Produto

Tabela VendasCab: Codigo, Data, Cliente

Tabela VendasProd: Venda, Produto


3-) Enumere e explique os tipos de junção do SQL (JOINs):

Join: quando queremos juntar dados de tabelas em que os atributos das duas tabelas sejam
coincidentes;

Left Join: quando queremos juntar dados de tabelas, mostrando os dados da tabela que foi
declarada “à esquerda do join” mesmo que não tenha correspondência na tabela “à direita”;

Right Join: quando queremos juntar dados de tabelas, mostrando os dados da tabela que foi
declarada “à direita do join” mesmo que não tenha correspondência na tabela “à esquerda”;

Full Outer Join: quando queremos juntar dados de tabelas, mesmo que não haja
correspondência em uma delas.

4-) Na teoria da orientação a objetos, o que significa a “herança”? Quais são os atributos (em
Delphi) que permitem controlar a exposição dos métodos às classes descendentes?

Herança é quando uma classe herda todas as características, como métodos e atributos, de
uma classe base, e a visibilidade dos métodos se dão através do public e private.
5-) Você tem conhecimento do que são Design Patterns no contexto da orientação a objetos?
Enumere quais você conhece : (Citar apenas nomes).

6-) Quais meios você utiliza para se manter atualizado em técnicas e novas ferramentas?

Consulta em artigos na internet, Linkedin, Fóruns.

Você também pode gostar