Baixe o app para aproveitar ainda mais
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.
Compartilhar