BANCO DE DADOS PARA WEB PROF. FABIANO TAGUCHI http://fabianotaguchi.wordpress.com fabianotaguchi@gmail.com BANCO DE DADOS O banco de dados será de fundamental importância para a criação de páginas dinâmicas, pois é, justamente no banco de dados que fica armazenado o conteúdos que será inserido dinamicamente nas páginas do site, além de que também será o responsável por receber os dados vindos dos formulários. Para manipulação de banco de dados é importante o conhecimento da linguagem SQL. REVISÃO DOS PRINCIPAIS CONCEITOS (SQL)
CRIANDO UM BANCO DE DADOS MySQL create database teste; use teste; PostGre SQL createdb teste; CRIANDO TABELAS O comando usado para criação das tabelas é: create table tabela{ nome_campo tipo_dado [NULL/NOT NULL], }; nome_campo tipo_dado [NULL/NOT NULL] BANCO DE DADOS EXEMPLO É criado um banco de dados chamado de exemplo com três tabelas: produto, categorias e subcategorias.
TABELA PRODUTOS TABELAS CATEGORIA E SUBCATEGORIA Deve ser criado duas tabelas: CATEGORIA SUBCATEGORIA INSERINDO, ALTERANDO E EXCLUINDO INFORMAÇÕES
INSERINDO REGISTROS O comando INSERT é usado para inserir registros em tabelas. Uma atenção vale para caracteres que precisam estar delimitados entre aspas. Abaixo vamos inserir um registro na tabela produtos, criado anteriormente. INSERT INTOproduto (codigo_produto, nome_produto, preco, cod_categoria, cod_subcategoria) VALUES(1, Camiseta do São Paulo, 199.90, 5, 2); ALTERANDO REGISTROS É possível também alterar registros de tabelas, o comando UPDATE é usado. Apresentado abaixo temos dois exemplos de uso deste comando: UPDATE categorias SET codigo_categoria=6 WHERE codigo_categoria=5; UPDATE produtos SET cod_categoria=6 WHERE código_categoria=5; ALTERANDO TABELAS Já para alterar a estrutura de uma tabela, o comando usado é o ALTER. No exemplo apresentado no slide será incluído como último campo da tabela produtos o campo fabricante, sendo este campo do tipo varchar, com limite para 50 caracteres. ALTER TABLE produtos ADD fabricante varchar(50);
EXCLUINDO INFORMAÇÕES O comando DELETE é usado para excluir registros em tabelas. Junto ao comando é utilizado o WHRE que auxilia na busca pelo campo. Vejamos abaixo dois exemplo de aplicação. DELETE FROM categorias WHERE nome_categoria = Artigos Esportivos DELETE FROM produtos WHERE cod_categoria=3; APAGAR UMA TABELA Ocomando usadoparaexcluirumatabelaemumbancodedadosé DROP TABLE. Quando uma tabela é excluída automaticamente, todo o seu conteúdo também é excluído. Na linha abaixo a tabela produtos é categoria são excluídas. DROP TABLE produtos, categorias; CONSULTANDO INFORMAÇÕES
CONSULTANDO INFORMAÇÕES SELECT é o comando aserutilizado paraaconsultadeinformações. A sintaxe para uso deste comando é apresentado abaixo: SELECT nome_campo FROM nome_tabela WHERE condição Exemplo: SELECT* FROM categorias; CONSULTANDO INFORMAÇÕES SELECT codigo_produto, nome_produto, preco FROM produtos; SELECT nome_produto FROM produtos WHERE preco>50; SELECT nome_subcategoria FROM subcategoria WHERE código_categoria=5; CONSULTANDO INFORMAÇÕES para consultar informações com mais de uma condição usamos operadores lógicos: AND e OR. Vejamos alguns exemplos: SELECT nome_produto, descrição_produto, preco FROM produtos WHERE cod_categoria=5 AND cod_subcategoria=2; SELECT nome_produto FROM produtos WHERE cod_categoria=5 AND (cod_subcategoria=2 OR cod_subcategoria=3);
CONSULTANDO INFORMAÇÕES Vejamos ainda outros exemplos de consulta com operadores: SELECT codigo_produto, nome_produto FROM produtos WHERE cod_categoria=2 AND preco>100; SELECTnome_produto, preco FROM produtos WHEREcod_categoria=4 AND preco>=50 AND preco<=500; OPERADOR LIKE O operador LIKE é usado para pesquisa partes de uma palavra dentrodeumregistrodeumbancodedados.vejamosalgunsexemplosdo operador LIKE: SELECT* FROM veiculos WHERE adicionais LIKE %ar condicionado% ; SELECT nome_veiculo FROM veículos WHERE nome_veiculo LIKE KADETT% ; OPERADOR LIKE Veremos outras formas de se usar o operador LIKE: LIKE _E% LIKE %O LIKE A%E%O NOT LIKE %@%
EXERCÍCIOS Crie a seguinte tabela em seu banco de dados: CREATE TABLE usuários{ nome varchar(60) not null, email varchar(70), cidade varchar(40) not null, estado varcha(2) ); EXERCÍCIOS Para consultar o nome de todas as cidades cadastradas, qual será o comando SELECT a ser executado? Provavelmente o comando que você executaria retornaria o nome de todas as cidades e haveria repetição, por vezes isso não é interessante, caso você precisasse saber quantas cidades diferentes você atende. DISTINCT Usando o comando DISTINCT dentro de uma consulta será retornado registros exclusivos de uma tabela satisfazendo a situação anterior. SELECT DISTINCT(cidade) FROM usuarios;
SOMANDO REGISTROS Através do comando COUNT é possível contar quantos registros existem emumbanco dedadosapartirdeumaconsulta. SELECT COUNT(*) FROM produtos; SELECT COUNT(*) FROM produtos WHERE cod_categoria=1; SOMANDO VALORES O comando SUM permite que sejam somados valores entre os campos de um tabela. O comando apresentado a seguir soma os preços dos produtos cadastrados. SELECT SUM(preco) FROM produtos; MAIOR E MENOR VALOR Preciso agora descobrir o produto mais caro e o mais barato da loja, para isso fazemos o uso do comando MAX e MIM respectivamente. SELECT MAX(preco) FROM produtos; SELECT MIN(preco) FROM produtos;
CALCULANDO A MÉDIA É possível ainda através do comando AVG calcular a média de valores de um determinado campo em uma tabela. No exemplo abaixo calculamos a média dos preços dos produtos da loja. SELECT AVG (preco) FROM produtos; AGRUPANDO RESULTADOS O comando GROUP BY permite agrupar os resultados de uma consulta. No exemplo quero descobrir quantos produtos existem em cada uma das subcategorias. SELECT cod_categoria, COUNT(*) FROM produtos GROUP BY cod_categoria; COMANDO HAVING O comando HAVING selecionar apenas alguns registros retornados através do uso do comando GROUP BY. No exemplo da consulta abaixo é retornado somente as categorias que possuem um único produto cadastrado. SELECT cod_categoria, COUNT (*) FROM produtos GROUP BY cod_categoria HAVING COUNT (*=1;
CONSULTAS EM MAIS TABELAS Em um determinado momento será necessário fazer uma consulta que envolva mais de uma tabela. NO exemplo a seguir é envolvido as tabelas produtos e categoria na consulta. SELECT nome_categoria, COUNT(*) FROM produtos, categorias WHERE codigo_categoria=cod_categoria GROUP BY nome_categoria; CONSULTANDO EM MAIS TABELAS NO exemplo exposto anteriormente envolvemos duas tabelas na consulta, sendo utilizado os campos: cod_categoria (produtos), além de codigo_categoria e nome_categoria (ambos da tabela categorias). Quando um mesmo campo tiver o mesmo nome em duas tabelas diferentes, a sintaxe de escrita na consulta altera-se para: nome_tabela.nome_campo CONSULTANDO EM MAIS TABELAS SELECTnome_produto, nome_subcategoria FROM produtos, subcategorias, categorias WHERE cod_subcategoria=codigo_subcategoria AND cod_categoria=categorias.codigo_categorias AND subcategorias.codigo_categoria=categorias.codigo_categoria
ORDENANDO RESULTADOS O comando ORDER BY é usado para ordenar o resultado de uma consulta SELECT. No exemplo apresentado abaixo é exibido o nome dos produtos em ordem alfabética. Para que a ordenação seja realizada em ordem decrescente bastaria adicionar o comando DESC ao final da consulta. SELECT codigo_produto, nome_produto FROM produtos ORDER BY nome_produto. ORDENANDO RESULTADOS Aordemdeavaliaçãoparaordenaçãoédaesquerdaparadireita,ou seja, o primeiro critério será o primeiro campo a ser utilizado na consulta. SELECTcodigo_categoria, nome_subcategoria FROM subcategorias ORDER BY codigo_categoria, nome_subcategoria; DETERMINANDO LIMITES Em uma consulta é possível determinar os limites para exibição dos resultados. A opção LIMIT determina o número máximo de registros a serem exibidos. SELECT* FROM produtos WHERE nome_produto LIKE CD% LIMIT 10; SELECT * FROM produtos WHERE nome_produto LIKE CD% ORDER BY nome_produto LIMIT 10;
COMADNO OFFSET Mas é preciso um controle para que na segunda página não seja exibido os primeiros 10 CDs novamente. O comando OFFSET é usado para que isso ocorra, de forma que na segunda página sejam exibidos os produtos de11a20nalistagem,naterceira de21a30eassimpordiante. SELECT* FROM produtos WHEREnome_produto LIKE CD% LIMIT10 OFFSET 10; AUTO INCREMENTO CAMPOS SEQUENCIAIS Para utilizar campos sequencias devemos criar os campos com a propriedade de auto incremento. Na hora da criação da tabela temos: create table produto{ codigo int NOT NULL AUTO_INCREMENT, nome varchar(70) NOT NULL, primary key(codigo) );