Prévia do material em texto
Banco de Dados II Aula 02 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br http://www.diemesleno.com.br Na aula passada vimos... Na aula passada vimos... - Sistemas de Gerenciamento de Banco de Dados (SGBD): - Arquitetura; - Segurança; - Concorrência; - Recuperação após falha; - Gerenciamento de Transações. Na aula de hoje veremos... Na aula de hoje veremos... - Linguagens de Consulta Linguagens de Consulta Linguagens de Consulta Consultar dados em uma base de dados é o propósito final da utilização de um banco de dados. Mas para que possamos fazer isso devemos: - Criar um banco de dados; - Construir as tabelas dentro deste banco de dados; - Popular as tabelas com alguns dados; Linguagens de Consulta Consultar dados em uma base de dados é o propósito final da utilização de um banco de dados. Mas para que possamos fazer isso devemos: - Criar um banco de dados; - Construir as tabelas dentro deste banco de dados; - Popular as tabelas com alguns dados; Linguagens de Consulta 1) Baseado na nota fiscal ao lado, aplique a normalização de dados (1º, 2º e 3º Formas Normais); 2) Crie os diagramas ER (Entidade-Relacionamento) e crie o banco de dados chamado 'normalizacao01'; 3) Adicione dados nas tabelas criadas, respeitando os relacionamentos. OBS: Recomenda-se a utilização da ferramenta MySQL Workbench. Linguagens de Consulta Após a noralização terminada, deveríamos ter algo semelhante a este diagrama. Linguagens de Consulta Neste pr imeiro momento iremos traba lhar com a ferramenta MySQL Workbench. Linguagens de Consulta Em aulas futuras, iremos trabalhar também com o pgAdmin para o PostgreSQL. Linguagens de Consulta Desta forma a ideia é que aprendam a utilizar as principais ferramentas do mercado para desenvolvimento. Linguagens de Consulta Abra o MySQL Workbench. Linguagens de Consulta Caso não tenha uma conexão criada, crie. Na imagem abaixo tenho uma conexão chamada 'Local' para o usuário 'aluno' Linguagens de Consulta Com a conexão criada, clique na mesma para que o Editor SQL seja aberto. Linguagens de Consulta Repare que nos schemas mostrados, o banco de dados que estamos utilizando 'normalizacao01' está selecionado. Linguagens de Consulta Repare que nos schemas mostrados, o banco de dados que estamos utilizando 'normalizacao01' está selecionado. Para selecionar qualquer banco de dados, basta dar um clique duplo no nome do mesmo. Linguagens de Consulta - Consultas básicas Linguagens de Consulta - Consultas básicas A estrutura básica de uma expressão de consulta SQL consiste em duas cláusulas: SELECT e FROM Linguagens de Consulta - Consultas básicas A estrutura básica de uma expressão de consulta SQL consiste em duas cláusulas: SELECT e FROM SELECT <lista-de-colunas> FROM <lista-de-tabelas>; Linguagens de Consulta - Consultas básicas A estrutura básica de uma expressão de consulta SQL consiste em duas cláusulas: SELECT e FROM A cláusula SELECT serve para definir as colunas que terão seus va l ores ex ib i dos na consu l ta e a o rdem de apresentação dessas colunas. A cláusula FROM, por sua vez, serve para indicar as tabelas de origem das referidas colunas. SELECT <lista-de-colunas> FROM <lista-de-tabelas>; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, nome, endereco, cpf e telefone da tabela clientes. SELECT id, nome, endereco, cpf, telefone FROM clientes; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, nome, endereco, cpf e telefone da tabela clientes. SELECT id, nome, endereco, cpf, telefone FROM clientes; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, nome, endereco, cpf e telefone da tabela clientes. OBS: Digite a consulta no Editor SQL do MySQL Workbench e execute clicando no botão 'execute'. SELECT id, nome, endereco, cpf, telefone FROM clientes; Linguagens de Consulta - Consultas básicas Na instrução SQL abaixo, estamos então selecionando as colunas: id, nome, endereco, cpf e telefone da tabela clientes. Linguagens de Consulta - Consultas básicas Faça o mesmo com as tabelas: produtos; notasFiscais; produtosNotasFiscais; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, nome e preco da tabela produtos. SELECT id, nome, preco FROM produtos; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, nome e preco da tabela produtos. SELECT id, nome, preco FROM produtos; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, nome e preco da tabela produtos. SELECT id, nome, preco FROM produtos; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, nome e preco da tabela produtos. SELECT id, nome, preco FROM produtos; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, idCliente, dataEmissao, e valor da tabela notasFiscais. SELECT id, idCliente, dataEmissao, valor FROM notasFiscais; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, idCliente, dataEmissao, e valor da tabela notasFiscais. SELECT id, idCliente, dataEmissao, valor FROM notasFiscais; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, idCliente, dataEmissao, e valor da tabela notasFiscais. SELECT id, idCliente, dataEmissao, valor FROM notasFiscais; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, idNotaFiscal, idProduto, e quantidade da tabela produtosNotaFiscal. SELECT id, idNotaFiscal, idProduto, quantidade FROM produtosNotaFiscal; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, idNotaFiscal, idProduto, e quantidade da tabela produtosNotaFiscal. SELECT id, idNotaFiscal, idProduto, quantidade FROM produtosNotaFiscal; Linguagens de Consulta - Consultas básicas Na instrução SQL acima, estamos então selecionando as colunas: id, idNotaFiscal, idProduto, e quantidade da tabela produtosNotaFiscal. SELECT id, idNotaFiscal, idProduto, quantidade FROM produtosNotaFiscal; Linguagens de Consulta - Consultas básicas - com alias (apelidos) Linguagens de Consulta - Consultas básicas - com alias (apelidos) Podemos dar 'apelidos' para as colunas da nossa consulta, utilizando a cláusula AS. Linguagens de Consulta - Consultas básicas - com alias (apelidos) Na consulta abaixo, estamos colocando aliases para as 3 colunas da tabela produtos. SELECT id AS Código, nome AS Nome, preco AS Preço FROM produtos; Linguagens de Consulta - Consultas básicas - com alias (apelidos) Na consulta abaixo, estamos colocando aliases para as 3 colunas da tabela produtos. SELECT id AS Código, nome AS Nome, preco AS Preço FROM produtos; Linguagens de Consulta - Consultas básicas - com alias (apelidos) Na consulta abaixo, estamos colocando aliases para as 3 colunas da tabela produtos. SELECT id AS Código, nome AS Nome, preco AS Preço FROM produtos; Linguagens de Consulta - Consultas básicas - com alias (apelidos) Na consulta abaixo, estamos colocando aliases para as 3 colunas da tabelaprodutos. SELECT id AS Código, nome AS Nome, preco AS Preço FROM produtos; Linguagens de Consulta - Consultas básicas Podemos também selecionar todas as colunas de uma tabela utilizando o caractere asterisco '*'. Linguagens de Consulta - Consultas básicas Podemos também selecionar todas as colunas de uma tabela utilizando o caractere asterisco '*'. SELECT * FROM produtos; Linguagens de Consulta - Consultas básicas Podemos também selecionar todas as colunas de uma tabela utilizando o caractere asterisco '*'. SELECT * FROM produtos; Linguagens de Consulta - Consultas com cláusula ORDER BY Linguagens de Consulta - Consultas com cláusula ORDER BY SELECT <lista-de-colunas> FROM <lista-de-tabelas> ORDER BY <lista-de- colunas>; Linguagens de Consulta - Consultas com cláusula ORDER BY A cláusula ORDER BY objetiva estabelecer a ordem de apresentação dos registros em uma consulta SQL. Ela deve ser incluída no código da consulta após as cláusulas SELECT e FROM. ORDER BY normalmente é a última cláusula de uma consulta. SELECT <lista-de-colunas> FROM <lista-de-tabelas> ORDER BY <lista-de- colunas>; Linguagens de Consulta - Consultas com cláusula ORDER BY SELECT id, idNotaFiscal, idProduto, quantidade FROM produtosNotaFiscal ORDER BY idPdoduto; Linguagens de Consulta - Consultas com cláusula ORDER BY SELECT id, idNotaFiscal, idProduto, quantidade FROM produtosNotaFiscal ORDER BY idPdoduto; Linguagens de Consulta - Consultas com cláusula ORDER BY SELECT id, idNotaFiscal, idProduto, quantidade FROM produtosNotaFiscal ORDER BY quantidade; Linguagens de Consulta - Consultas com cláusula ORDER BY SELECT * FROM produtosNotaFiscal ORDER BY idNotaFiscal; Linguagens de Consulta - Consultas com cláusula ORDER BY A ordenação pode ser ainda crescente ou decrescente, adicionando os parâmetros ASC ou DESC. OBS: Por padrão as ordenações são crescentes. (ASC); SELECT * FROM produtosNotaFiscal ORDER BY idNotaFiscal DESC; Linguagens de Consulta - Consultas com cláusula ORDER BY SELECT * FROM produtosNotaFiscal ORDER BY idNotaFiscal DESC; Linguagens de Consulta - Consultas com limite Linguagens de Consulta - Consultas com limite Conforme pudemos notar, até o momento, em todas as consultas que fizemos trouxemos todos os dados. Portanto, se uma tabela tiver 10 registros, trará os 10, da mesma forma que se tiver 10 milhões de registros, trará todos eles. Linguagens de Consulta - Consultas com limite Podemos adicionar a cláusula LIMIT N, para limitar a quantidade de registros que queremos que a consulta traga, onde N é o número de registros a serem trazidos. Linguagens de Consulta - Consultas com limite Na consulta acima, estamos limitando os resultados a 15. Portando se a tabela em questão tiver somente 8 registros, trará apenas 8. Se tiver 500, trará somente os 15 primeiros. SELECT * FROM produtosNotaFiscal ORDER BY idNotaFiscal LIMIT 15; Linguagens de Consulta - Consultas com limite Na consulta acima, estamos limitando os resultados a 15. Portando se a tabela em questão tiver somente 8 registros, trará apenas 8. Se tiver 500, trará somente os 15 primeiros. SELECT * FROM produtosNotaFiscal ORDER BY idNotaFiscal LIMIT 15; Linguagens de Consulta - Consultas com limite OBS: Podemos utilizar praticamente todas as cláusulas em conjunto, para filtrarmos os resultados de acordo com a necessidade. Linguagens de Consulta - Consultas com limite Na consulta acima, estamos trazendo desta vez, os últimos 15 registros da tabela. SELECT * FROM produtosNotaFiscal ORDER BY idNotaFiscal DESC LIMIT 15; Linguagens de Consulta - Consultas com limite Na consulta acima, estamos trazendo desta vez, os últimos 15 registros da tabela. SELECT * FROM produtosNotaFiscal ORDER BY idNotaFiscal DESC LIMIT 15; Linguagens de Consulta - Consultas com cláusula WHERE Linguagens de Consulta - Consultas com cláusula WHERE A cláusula WHERE filtra registros de colsultas, permitindo- nos exibir alguns registros enquanto deixamos outros de fora da consulta. Linguagens de Consulta - Consultas com cláusula WHERE SELECT <lista-de-colunas> FROM <lista-de-tabelas> WHERE <condições>; Linguagens de Consulta - Consultas com cláusula WHERE A cláusula WHERE deve estar sempre após o SELECT e FROM. Quando houver ORDER BY o WHERE deverá ser posto antes dele, conforme: SELECT <lista-de-colunas> FROM <lista-de-tabelas> WHERE <condições>; SELECT <lista-de-colunas> FROM <lista-de-tabelas> WHERE <condições> ORDER BY <lista-de-colunas>; Linguagens de Consulta - Consultas com cláusula WHERE Na consulta acima, estamos trazendo todos os dados da tabela produtosNotaFiscal onde o id seja igual a 666. SELECT * FROM produtosNotaFiscal WHERE id = 666; Linguagens de Consulta - Consultas com cláusula WHERE Na consulta acima, estamos trazendo todos os dados da tabela produtosNotaFiscal onde o id seja igual a 666. SELECT * FROM produtosNotaFiscal WHERE id = 666; Linguagens de Consulta - Consultas com cláusula WHERE Na consulta acima, estamos trazendo todos os dados da tabela produtosNotaFiscal onde o idProduto seja igual a 5. SELECT * FROM produtosNotaFiscal WHERE idProduto = 5; Linguagens de Consulta - Consultas com cláusula WHERE Na consulta acima, estamos trazendo todos os dados da tabela produtosNotaFiscal onde o idProduto seja igual a 5. SELECT * FROM produtosNotaFiscal WHERE idProduto = 5; Linguagens de Consulta - Consultas com cláusula WHERE Na consulta acima, estamos trazendo todos os dados da tabela produtos onde o nome seja igual a "Produto 15". SELECT * FROM produtos WHERE nome = "Produto 15"; Linguagens de Consulta - Consultas com cláusula WHERE Na consulta acima, estamos trazendo todos os dados da tabela produtos onde o nome seja igual a "Produto 15". SELECT * FROM produtos WHERE nome = "Produto 15"; Linguagens de Consulta - Consultas com cláusula WHERE Na consulta acima, estamos trazendo todos os dados da tabela produtos onde o nome seja igual a "Produto 15". OBS: Note que só será encontrado caso seja exatamente o que foi colocado entre as aspas. SELECT * FROM produtos WHERE nome = "Produto 15"; Linguagens de Consulta - Consultas com cláusula WHERE Na consulta acima, estamos trazendo todos os dados da tabela produtos onde o nome seja igual a "Produto". OBS: Como não existe nenhum produto com nome igual a "Produto", a consulta não retorna nada. SELECT * FROM produtos WHERE nome = "Produto"; Linguagens de Consulta - Consultas com cláusula WHERE - LIKE Linguagens de Consulta - Consultas com cláusula WHERE - LIKE Podemos realizar consultas com textos parciais utilizando a cláusula LIKE. Linguagens de Consulta - Consultas com cláusula WHERE - LIKE Na consulta abaixo, selecionamos todas as colunas da tabela produtos onde o nome seja como o padrão "Produto 1%". SELECT * FROM produtos WHERE nome LIKE "Produto 1%"; Linguagens de Consulta - Consultas com cláusula WHERE - LIKE Na consulta abaixo, selecionamos todas as colunas da tabela produtos onde o nome seja como o padrão "Produto 1%". SELECT * FROM produtos WHERE nome LIKE "Produto 1%"; Linguagens de Consulta - Consultas com cláusula WHERE - LIKE Na consulta abaixo, selecionamos todas as colunas da tabela produtos onde o nome seja como o padrão "Produto 1%". SELECT * FROM produtos WHERE nome LIKE "Produto 1%"; Repare que a consulta trouxe todos os dados onde o nome começava com "Produto 1...", conforme padrão solicitado. Linguagens de Consulta - Consultas com cláusula WHERE - AND Linguagens deConsulta - Consultas com cláusula WHERE - AND Podemos concatenar vários filtros adicionando o parâmetro AND. Linguagens de Consulta - Consultas com cláusula WHERE - AND Na consulta abaixo, selecionamos todas as colunas da tabela produtos onde o id seja maior que 10 e menor que 50. SELECT * FROM produtos WHERE id > 10 AND id < 50; Linguagens de Consulta - Consultas com cláusula WHERE - AND Na consulta abaixo, selecionamos todas as colunas da tabela produtos onde o id seja maior que 10 e menor que 50. SELECT * FROM produtos WHERE id > 10 AND id < 50; Linguagens de Consulta - Consultas com funções de agrupamento Linguagens de Consulta - Consultas com funções de agrupamento A linguagem SQL conta com várias funções para consultas. Essas funções servem para realizar operações e simplificar algumas ações. Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos contando quantos registros existem na tabela produtos. SELECT COUNT(*) FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos contando quantos registros existem na tabela produtos. SELECT COUNT(*) FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos contando quantos registros existem na tabela produtos onde os nomes dos produtos tenham o padrão "Produto %6%". SELECT COUNT(*) FROM produtos WHERE nome LIKE "Produto %6%; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos contando quantos registros existem na tabela produtos onde os nomes dos produtos tenham o padrão "Produto %6%". SELECT COUNT(*) FROM produtos WHERE nome LIKE "Produto %6%; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos fazendo uma contagem de q u a n t o s p r o d u t o s f o r a m v e n d i d o s f a z e n d o u m agrupamento por idProduto. SELECT idProduto, COUNT(*) AS Quantidade_Produtos FROM produtosNotaFiscal GROUP BY idProduto; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos fazendo uma contagem de q u a n t o s p r o d u t o s f o r a m v e n d i d o s f a z e n d o u m agrupamento por idProduto. SELECT idProduto, COUNT(*) AS Quantidade_Produtos FROM produtosNotaFiscal GROUP BY idProduto; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos buscando o maior preço entre os produtos cadastrados. SELECT MAX(preco) AS Maior_Preço FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos buscando o maior preço entre os produtos cadastrados. SELECT MAX(preco) AS Maior_Preço FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos buscando o menor preço entre os produtos cadastrados. SELECT MIN(preco) AS Menor_Preço FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos buscando o menor preço entre os produtos cadastrados. SELECT MIN(preco) AS Menor_Preço FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos fazendo um somatório de todos os valores dos produtos cadastrados. SELECT SUM(preco) AS Valor_Total FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos fazendo um somatório de todos os valores dos produtos cadastrados. SELECT SUM(preco) AS Valor_Total FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos solicitando a média dos valores dos produtos cadastrados. SELECT AVG(preco) AS Valor_Médio FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos solicitando a média dos valores dos produtos cadastrados. SELECT AVG(preco) AS Valor_Médio FROM produtos; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos listando todas as notas fiscais emitidas, separando em colunas diferentes o dia, o mês e o ano de emissão. SELECT id, idCliente, valor, DAY(dataEmissao) AS dia_emussão, MONTH(dataEmissao) AS mês_emissão, YEAR(dataEmissao) AS ano_emissão FROM notasFiscais; Linguagens de Consulta - Consultas com funções de agrupamento Na consulta abaixo, estamos listando todas as notas fiscais emitidas, separando em colunas diferentes o dia, o mês e o ano de emissão. SELECT id, idCliente, valor, DAY(dataEmissao) AS dia_emussão, MONTH(dataEmissao) AS mês_emissão, YEAR(dataEmissao) AS ano_emissão FROM notasFiscais; Linguagens de Consulta - Consultas com mais de uma tabela Linguagens de Consulta - Consultas com mais de uma tabela Todas as consultas realizadas até aqui envolveram sempre uma única tabela. Sabemos porém, que nosso banco de dados possu i relacionamento entre tabelas e todo profissional de informática que trabalha com desenvolvimento de sistemas, normalmente, elebora consultas com mais de uma tabela simultaneamente. Linguagens de Consulta - Consultas com mais de uma tabela Conforme podemos ver, na tabela notasFiscais possuímos um relacionamento com a tabela clientes, pelo idCliente presente nesta tabela. Linguagens de Consulta - Consultas com mais de uma tabela Sabemos que na tabela clientes, temos o nome do cliente, além do id e outros dados. Linguagens de Consulta - Consultas com mais de uma tabela Sabemos que na tabela clientes, temos o nome do cliente, além do id e outros dados. Já que na tabela notasFiscais temos o idCliente que se relaciona com a tabela clientes pelo id presente nesta tabela, podemos realizar uma consulta buscando dados em ambas tabelas. Linguagens de Consulta - Consultas com mais de uma tabela Na consulta abaixo, estamos buscando todas as colunas da tabela notasFiscais, apresentando no lugar de idCliente o nome do próprio, buscado na tabela clientes, onde o idCliente da tabela de notasFiscais corresponda ao id da tabela clientes. SELECT nf.id AS ID, c.nome AS Cliente, nf.dataEmissao AS Emissão, nf.valor AS Valor FROM notasFiscais AS nf, clientes AS c WHERE nf.idCliente = c.id; Linguagens de Consulta - Consultas com mais de uma tabela Na consulta abaixo, estamos buscando todas as colunas da tabela notasFiscais, apresentando no lugar de idCliente o nome do próprio, buscado na tabela clientes, onde o idCliente da tabela de notasFiscais corresponda ao id da tabela clientes. SELECT nf.id AS ID, c.nome AS Cliente, nf.dataEmissao AS Emissão, nf.valor AS Valor FROM notasFiscais AS nf, clientes AS c WHERE nf.idCliente = c.id; Linguagens de Consulta Tudo o que vimos nesta aula pode ser aplicada em conjunto, mixando as cláusulas para chegar no resultado da consulta pretendida. Existem muitos outros recursos, funções e ações para ajudar nas consultas e na documentação[1] oficial pode-se encontrar informações mais afundo. [1]http://dev.mysql.com/doc/refman/5.7/en/ Banco de Dados II Aula 02 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br http://www.diemesleno.com.br Exercício 1) Baseado na última consulta, onde trabalhamos com mais de 1 tabela (notasFiscais e clientes); Faça uma consulta na tabela produtosNotaFiscal e faça aparecer o nome do cliente para quem foi emitida a nota fiscal, a quantidade de produtos descritos na nota fiscal, a data de emissão da nota fiscal e o valor da nota fiscal, conforme imagem abaixo.