Buscar

Aula4 - SQL DQL

Prévia do material em texto

Gustavo Piva 
gustavo.piva@etec.sp.gov.br 
SQL DQL - Continuação 
DQL (Data Query Language) ou Linguagem 
de Seleção de Dados. 
 Serve para selecionar os dados armazenados em 
banco de dados. 
 Formatar os dados ao exibi-los. 
 Auxiliar na criação de visões de dados. 
 Atualizar dados vindos de outras tabelas. 
 
 
Comando Select Sintaxe Completa 
SELECT [DISTINCT/UNIQUE/ALL]<nome dos campos, separados por 
vírgulas> 
FROM <nome das tabelas , separadas por vírgulas> e/ou 
[INNER/LEFT/RIGHT [OUTER] JOIN] [ON] <Campos das tabelas 
relacionadas> 
WHERE <condições separadas por conectores and or xor> 
GROUP BY <Campos a serem usados no agrupamento, separados por 
vírgulas> 
HAVING <condições separadas por conectores and or xor> 
ORDER BY <Campos a serem usados como ordenação, separados por 
vírgulas > [DESC]; 
[UNION [ALL]/INTERSECT/MINUS] 
Base exemplo 
 Para os nossos exemplos utilizaremos o modelo 
visto nos exercícios da aula2. Mostrado abaixo: 
 
SQL DQL - Continuação 
 Vamos trabalhar agora nas consultas que 
dependem de mais de uma tabela para obter as 
informações necessárias. 
Como faremos isso ? 
Vamos analisar os exemplos a seguir para 
entender como é construída este tipo de 
consulta. 
Exemplo 1 
 Imagine que façam esta questão para você, quantas compras foram 
efetuadas pelo cliente Jao Perfumo no mês de maio/2020 ? 
 
 
 
 
 
 
 
 
 Olhando o modelo, vemos que o nome do cliente está na tabela 
Cliente e as compras são registradas na tabela Compra. 
 
 Logo, tenho que selecionar o cliente de nome Jao Perfumo na tabela 
Cliente, depois, usando o relacionamento com a tabela Compra, selecionar 
quais compras este cliente fez no mês de maio/2020. 
Exemplo 1 
 Como fazer a consulta em 2 tabelas ao mesmo tempo ? 
 Existem 2 formas de fazer este tipo de seleção. 
1) Usar o JOIN, na clausula from para, através da 
relação chave primária/chave estrangeira. 
2) Usar a relação chave primária/chave estrangeira na 
clausula FROM criando assim a relação entre as 
tabelas. 
 Vamos analisar as 2 formas: 
Exemplo 1 – forma 1 
 Uso do JOIN 
 Sintaxe: 
SELECT * ou nome de campos a serem exibidos separados 
por vírgulas (não mudou) 
FROM <Tabela1> INNER JOIN <Tabela2> 
ON Tabela1.Chave Primária/Estrangeira = Tabela2..Chave 
Primária/Estrangeira <and/or/xor Tabela1.Chave 
Primária/Estrangeira = Tabela2.Chave Primária/Estrangeira> 
etc.. 
WHERE <condições separadas por conectores 
and/or/xor> (não mudou) 
 
Exemplo 1 – forma 1 
 Outra definição necessária é quais campos serão exibidos para 
responder a questão. Sugiro nome do Cliente, número da NF e 
data de emissão e valor total da compra. Quanto à regra de 
seleção, queremos as compras do Cliente Jao Perfumo no mês 
de maio/2020. 
 Traduzindo tudo isso para o comando SQL temos: 
SELECT CLIENTE.nome, COMPRA.numeroNF, 
COMPRA.dataEmissao, COMPRA.valorTotal 
FROM CLIENTE INNER JOIN COMPRA 
ON CLIENTE.codigo = COMPRA.Cliente_codigo 
WHERE CLIENTE.nome = ‘Jao Perfumo’ AND 
COMPRA.dataemissao >= ‘2020-05-01‘ AND 
COMPRA.dataemissao <= ‘2020-05-31‘; 
Exemplo 1 – forma 1 
 Resultado nos dados existentes no banco MySQL 
inseridos nas aulas passadas: 
 
 
 
 
 Podemos ver então que o Cliente Jao Perfumo fez 2 
compras no mês de maio uma no dia 27 e outra no dia 
28 de maio que possuem os números de notas fiscais 1 
e 6 nos valores de R$ 1,50 e R$ 11,44. 
 
Exemplo 1 – forma 2 
 Outra forma de responder à mesma pergunta do exemplo1 
usando apenas o conhecimento da aula passada é colocar todas 
as regras, inclusive as de relacionamento, na clausula WHERE. 
Então temos: 
 
SELECT CLIENTE.nome, COMPRA.numeroNF, 
COMPRA.dataEmissao, COMPRA.valorTotal 
FROM CLIENTE, COMPRA 
WHERE CLIENTE.codigo = COMPRA.Cliente_codigo AND 
 CLIENTE.nome = ‘Jao Perfumo’ AND 
 COMPRA.dataemissao >= ‘2020-05-01‘ AND 
 COMPRA.dataemissao <= ‘2020-05-31‘; 
Exemplo1 – forma 2 
 Vejam que o resultado final é o mesmo: 
 
 
 
 
 
 
 Você pode então usar as 2 sintaxes do SQL para obter o 
mesmo resultado. 
 
Exemplo 2 
 Imagine que, no modelo sugerido, se tenha a seguinte 
questão: Qual o nome dos Clientes que compraram o 
produto Bala 7 feio no mês de maio de 2020. 
 Analisando o 
 diagrama: 
Exemplo 2 
 Vejam que, para responder esta questão devemos usar 
todas as tabelas do modelo pois, o nome do cliente está em 
uma extremidade do diagrama e o nome do produto em 
outra. Logo nossa pesquisa irá sair da tabela Produto (onde 
está o nome do produto) e chegar a tabela Cliente (onde 
está o nome do cliente) passando pelas tabelas 
ItemCompra e Compra (onde está a data de emissão). 
 Para resposta a esta questão, desta vez, vamos exibir apenas 
o nome dos clientes que compraram o produto. 
Exemplo 2 – forma 1 
 Na primeira sintaxe ficaria : 
SELECT Cliente.nome 
FROM Produto 
 INNER JOIN ItemCompra 
 ON Produto.codigo = ItemCompra.Produto_codigo 
 INNER JOIN Compra 
 ON ItemCompra.Compra_numeroNF = 
 Compra.numeroNF 
 INNER JOIN Cliente 
 ON Compra.Cliente_codigo = Cliente.codigo 
WHERE Compra.dataEmissao >= ‘2020-05-01’ AND 
 Compra.dataEmissao <= ‘2020-05-31’ AND 
 Produto.descricao = ‘Bala 7 Feito’; 
 
Exemplo2 – forma 1 
Exemplo2 – forma 2 
 Usando agora a segunda sintaxe, temos: 
SELECT Cliente.nome 
FROM Produto, ItemCompra,Compra , Cliente 
WHERE Produto.codigo = ItemCompra.Produto_codigo AND 
ItemCompra.Compra_numeroNF = Compra.numeroNF AND 
 Compra.Cliente_codigo = Cliente.codigo AND 
 Compra.dataEmissao >= ‘2020-05-01’ AND 
 Compra.dataEmissao <= ‘2020-05-31’ AND 
 Produto.descricao = ‘Bala 7 Feito’; 
 
Exemplo2 – forma 2 
 Resultado: 
Observações importantes 
 Tente sempre, quando estiver criando 
subconjuntos da solução, criar os menores 
possíveis. Veja o último exemplo: 
1) Selecionei apenas 1 registro na tabela Produto. 
2) Depois selecionei apenas os ItensCompra que 
eram daquele produto. 
3) Depois apenas as compras com aquele produto 
selecionado. 
4) E por último os clientes daquelas NF´s. 
 
Observações Importantes 
 Ao analisar como responder uma questão, pense nas 
informações que você tem e depois em como percorrer 
as tabelas (usando a relação Chave Primaria = Chave 
Estrangeira ou vice-versa) 
 Depois pense como formar o menor conjunto de dados 
quando do percorrimento destas. 
 Depois transcreva isso para a linguagem SQL.

Continue navegando