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
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;
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;
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.
Após a noralização terminada, deveríamos ter algo semelhante a este diagrama.
Neste primeiro momento iremos trabalhar com a ferramenta MySQL Workbench.
Em aulas futuras, iremos trabalhar também com o pgadmin para o PostgreSQL.
Desta forma a ideia é que aprendam a utilizar as principais ferramentas do mercado para desenvolvimento.
Abra o MySQL Workbench.
Caso não tenha uma conexão criada, crie. Na imagem abaixo tenho uma conexão chamada 'Local' para o usuário 'aluno'
Com a conexão criada, clique na mesma para que o Editor SQL seja aberto.
Repare que nos schemas mostrados, o banco de dados que estamos utilizando 'normalizacao01' está selecionado.
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.
- Consultas básicas
- Consultas básicas A estrutura básica de uma expressão de consulta SQL consiste em duas cláusulas: SELECT e FROM
- 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>;
- 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>; A cláusula SELECT serve para definir as colunas que terão seus valores exibidos na consulta e a ordem de apresentação dessas colunas. A cláusula FROM, por sua vez, serve para indicar as tabelas de origem das referidas colunas.
- Consultas básicas SELECT id, nome, endereco, cpf, telefone FROM clientes; Na instrução SQL acima, estamos então selecionando as colunas: id, nome, endereco, cpf e telefone da tabela clientes.
- Consultas básicas SELECT id, nome, endereco, cpf, telefone FROM clientes; Na instrução SQL acima, estamos então selecionando as colunas: id, nome, endereco, cpf e telefone da tabela clientes.
- Consultas básicas SELECT id, nome, endereco, cpf, telefone FROM clientes; 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'.
- Consultas básicas Na instrução SQL abaixo, estamos então selecionando as colunas: id, nome, endereco, cpf e telefone da tabela clientes.
- Consultas básicas Faça o mesmo com as tabelas: produtos; notasfiscais; produtosnotasfiscais;
- Consultas básicas SELECT id, nome, preco FROM produtos; Na instrução SQL acima, estamos então selecionando as colunas: id, nome e preco da tabela produtos.
- Consultas básicas SELECT id, nome, preco FROM produtos; Na instrução SQL acima, estamos então selecionando as colunas: id, nome e preco da tabela produtos.
- Consultas básicas SELECT id, nome, preco FROM produtos; Na instrução SQL acima, estamos então selecionando as colunas: id, nome e preco da tabela produtos.
- Consultas básicas SELECT id, nome, preco FROM produtos; Na instrução SQL acima, estamos então selecionando as colunas: id, nome e preco da tabela produtos.
- Consultas básicas SELECT id, idcliente, dataemissao, valor FROM notasfiscais; Na instrução SQL acima, estamos então selecionando as colunas: id, idcliente, dataemissao, e valor da tabela notasfiscais.
- Consultas básicas SELECT id, idcliente, dataemissao, valor FROM notasfiscais; Na instrução SQL acima, estamos então selecionando as colunas: id, idcliente, dataemissao, e valor da tabela notasfiscais.
- Consultas básicas SELECT id, idcliente, dataemissao, valor FROM notasfiscais; Na instrução SQL acima, estamos então selecionando as colunas: id, idcliente, dataemissao, e valor da tabela notasfiscais.
- Consultas básicas SELECT id, idnotafiscal, idproduto, quantidade FROM produtosnotafiscal; Na instrução SQL acima, estamos então selecionando as colunas: id, idnotafiscal, idproduto, e quantidade da tabela produtosnotafiscal.
- Consultas básicas SELECT id, idnotafiscal, idproduto, quantidade FROM produtosnotafiscal; Na instrução SQL acima, estamos então selecionando as colunas: id, idnotafiscal, idproduto, e quantidade da tabela produtosnotafiscal.
- Consultas básicas SELECT id, idnotafiscal, idproduto, quantidade FROM produtosnotafiscal; Na instrução SQL acima, estamos então selecionando as colunas: id, idnotafiscal, idproduto, e quantidade da tabela produtosnotafiscal.
- Consultas básicas - com alias (apelidos)
- Consultas básicas - com alias (apelidos) Podemos dar 'apelidos' para as colunas da nossa consulta, utilizando a cláusula AS.
- 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;
- 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;
- 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;
- 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;
- Consultas básicas Podemos também selecionar todas as colunas de uma tabela utilizando o caractere asterisco '*'.
- Consultas básicas SELECT * FROM produtos; Podemos também selecionar todas as colunas de uma tabela utilizando o caractere asterisco '*'.
- Consultas básicas SELECT * FROM produtos; Podemos também selecionar todas as colunas de uma tabela utilizando o caractere asterisco '*'.
- Consultas com cláusula ORDER BY
- Consultas com cláusula ORDER BY SELECT <lista-de-colunas> FROM <lista-de-tabelas> ORDER BY <lista-decolunas>;
- Consultas com cláusula ORDER BY SELECT <lista-de-colunas> FROM <lista-de-tabelas> ORDER BY <lista-decolunas>; 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.
- Consultas com cláusula ORDER BY SELECT id, idnotafiscal, idproduto, quantidade FROM produtosnotafiscal ORDER BY idpdoduto;
- Consultas com cláusula ORDER BY SELECT id, idnotafiscal, idproduto, quantidade FROM produtosnotafiscal ORDER BY idpdoduto;
- Consultas com cláusula ORDER BY SELECT id, idnotafiscal, idproduto, quantidade FROM produtosnotafiscal ORDER BY quantidade;
- Consultas com cláusula ORDER BY SELECT * FROM produtosnotafiscal ORDER BY idnotafiscal;
- Consultas com cláusula ORDER BY SELECT * FROM produtosnotafiscal ORDER BY idnotafiscal DESC; 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);
- Consultas com cláusula ORDER BY SELECT * FROM produtosnotafiscal ORDER BY idnotafiscal DESC;
- Consultas com limite
- 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.
- 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.
- Consultas com limite SELECT * FROM produtosnotafiscal ORDER BY idnotafiscal LIMIT 15; 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.
- Consultas com limite SELECT * FROM produtosnotafiscal ORDER BY idnotafiscal LIMIT 15; 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.
- Consultas com limite OBS: Podemos utilizar praticamente todas as cláusulas em conjunto, para filtrarmos os resultados de acordo com a necessidade.
- Consultas com limite SELECT * FROM produtosnotafiscal ORDER BY idnotafiscal DESC LIMIT 15; Na consulta acima, estamos trazendo desta vez, os últimos 15 registros da tabela.
- Consultas com limite SELECT * FROM produtosnotafiscal ORDER BY idnotafiscal DESC LIMIT 15; Na consulta acima, estamos trazendo desta vez, os últimos 15 registros da tabela.
- Consultas com cláusula WHERE
- Consultas com cláusula WHERE A cláusula WHERE filtra registros de colsultas, permitindonos exibir alguns registros enquanto deixamos outros de fora da consulta.
- Consultas com cláusula WHERE SELECT <lista-de-colunas> FROM <lista-de-tabelas> WHERE <condições>;
- Consultas com cláusula WHERE SELECT <lista-de-colunas> FROM <lista-de-tabelas> WHERE <condições>; 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> ORDER BY <lista-de-colunas>;
- Consultas com cláusula WHERE SELECT * FROM produtosnotafiscal WHERE id = 666; Na consulta acima, estamos trazendo todos os dados da tabela produtosnotafiscal onde o id seja igual a 666.
- Consultas com cláusula WHERE SELECT * FROM produtosnotafiscal WHERE id = 666; Na consulta acima, estamos trazendo todos os dados da tabela produtosnotafiscal onde o id seja igual a 666.
- Consultas com cláusula WHERE SELECT * FROM produtosnotafiscal WHERE idproduto = 5; Na consulta acima, estamos trazendo todos os dados da tabela produtosnotafiscal onde o idproduto seja igual a 5.
- Consultas com cláusula WHERE SELECT * FROM produtosnotafiscal WHERE idproduto = 5; Na consulta acima, estamos trazendo todos os dados da tabela produtosnotafiscal onde o idproduto seja igual a 5.
- Consultas com cláusula WHERE SELECT * FROM produtos WHERE nome = "Produto 15"; Na consulta acima, estamos trazendo todos os dados da tabela produtos onde o nome seja igual a "Produto 15".
- Consultas com cláusula WHERE SELECT * FROM produtos WHERE nome = "Produto 15"; Na consulta acima, estamos trazendo todos os dados da tabela produtos onde o nome seja igual a "Produto 15".
- Consultas com cláusula WHERE SELECT * FROM produtos WHERE nome = "Produto 15"; 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.
- Consultas com cláusula WHERE SELECT * FROM produtos WHERE nome = "Produto"; 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.
- Consultas com cláusula WHERE - LIKE
- Consultas com cláusula WHERE - LIKE Podemos realizar consultas com textos parciais utilizando a cláusula LIKE.
- 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%";
- 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%";
- 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.
- Consultas com cláusula WHERE - AND
- Consultas com cláusula WHERE - AND Podemos concatenar vários filtros adicionando o parâmetro AND.
- 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;
- 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;
- Consultas com funções de agrupamento
- 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.
- Consultas com funções de agrupamento Na consulta abaixo, estamos contando quantos registros existem na tabela produtos. SELECT COUNT(*) FROM produtos;
- Consultas com funções de agrupamento Na consulta abaixo, estamos contando quantos registros existem na tabela produtos. SELECT COUNT(*) FROM produtos;
- 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%;
- 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%;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- 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;
- Consultas com mais de uma tabela
- 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 possui relacionamento entre tabelas e todo profissional de informática que trabalha com desenvolvimento de sistemas, normalmente, elebora consultas com mais de uma tabela simultaneamente.
- 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.
- Consultas com mais de uma tabela Sabemos que na tabela clientes, temos o nome do cliente, além do id e outros dados.
- 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.
- 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;
- 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;
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.