Prévia do material em texto
Curso Superior de Análise e Desenvolvimento de Sistemas Professor: Dr. Guilherme Dal Bianco Sistema de Gerenciamento de Banco de Dados (S075) ● Tópicos – Junção em consultas – Update – Delete – Exercícios DML – CONSULTANDO DADOS EM TABELAS Estrutura Básica SELECT => PROJEÇÃO FROM => TABELA OU PRODUTO CARTESIANO DELAS WHERE => SELEÇÃO Coluna1[,Coluna2 [,...] ] (Condição(Tabela1 [X Tabela2 [X ... ] ])) SELECT Coluna1[,Coluna2 [, ... ] ] FROM Tabela1,[Tabela2 [, ... ] ] WHERE Condição DML – CONSULTANDO DADOS EM TABELAS ● SELECT/FROM - Projeta os dados da(s) tabela(s), de acordo com os critérios especificados. ● A projeção do resultado é em uma estrutura tipo tabela ● Basta informar o que se quer, sem se preocupar como fazer isto (SQL Não é procedural). ● Na cláusula SELECT, pode-se utilizar operadores aritméticos e funções de agregações, para projetar cálculos. DML – CONSULTANDO DADOS EM TABELAS Exemplos: /* Projetar todas as informações dos autores */ SELECT CodAutor, Nome, Nascimento FROM AUTOR ; OU SELECT * FROM AUTOR ; DML – CONSULTANDO DADOS EM TABELAS Exemplos: /* Projetar a média dos valores dos livros */ SELECT AVG (Valor) FROM LIVRO; DML – CONSULTANDO DADOS EM TABELAS Exemplos: /* Projetar todas as informações dos autores */ SELECT CodAutor, Nome, Nascimento FROM AUTOR ; OU SELECT * FROM AUTOR ; /* Projetar a média dos valores dos livros */ SELECT AVG (Valor) FROM LIVRO; /*Projetar todos os livros(títulos) e seus valores com 10% de desconto*/ SELECT Titulo, Valor - (Valor * 0.1) FROM LIVRO; /* Projetar a quantidade de autores cadastrados */ SELECT COUNT (*) AS QUANTIDADE, ‘ud’ AS UNIDADE FROM AUTOR; DML – CONSULTANDO DADOS EM TABELAS ALL é o padrão quando não especificado DISTINCT. Exemplos: /* Projetar todas as cidades das editoras sem duplicatas */ SELECT ALL Cidade FROM EDITORA; OU SELECT Cidade FROM EDITORA; SELECT DISTINCT Cidade FROM EDITORA; /* Projetar todas as cidades das editoras repetidamente*/ DML – CONSULTANDO DADOS EM TABELAS Uma coluna pode ser especificada pelo nome da sua tabela (Tabela.Coluna), bem como, ser renomeada durante a consulta (Coluna AS ColunaRenomeada) /* Projetar todos os nomes e respectivos nascimentos da tabela autor. NOTE: mesmo especificando Tabela.Coluna, FROM é obrigatório */ SELECT AUTOR.Nome , AUTOR.Nascimento FROM AUTOR; SELECT A.Nome , A.Nascimento FROM AUTOR as A; DML – CONSULTANDO DADOS EM TABELAS ● WHERE - Especifica quais linhas da(s) tabela(s) listada(s) na cláusula FROM são afetadas pela condição. Se esta não for especificada, a consulta retornará todas as linhas da tabela. ● Operadores Utilizados ● A condição de WHERE pode ser de três tipos: Comparação Ligação entre tabelas (Join) Sub-Consulta (Sub-Queries) DML – CONSULTANDO DADOS EM TABELAS Comparação ● Expressão Operador Relacional Expressão /* Projetar livros publicados após 30 de maio de 1993 */ SELECT * FROM LIVRO WHERE Publicacao > ‘5/30/93’; ● ● /* Projetar livros com valor de 10.00 a 100.00 */ SELECT * FROM LIVRO WHERE Valor BETWEEN 10.00 AND 100.00; DML – CONSULTANDO DADOS EM TABELAS Comparação ● Expressão [NOT] IN (Valores) A condição é verdadeira se o valor da expressão é igual a um dos valores entre parênteses /* Projetar as Editoras com sede em São Paulo ou Rio de Janeiro*/ SELECT * FROM EDITORA WHERE Cidade IN (‘São Paulo’, ‘Rio de Janeiro’); A seguinte instrução SQL retornará pessoas com nomes que começam com um 'O': SELECT * FROM persons ONDE FirstName LIKE '% O' A seguinte instrução SQL retornará pessoas com nomes que terminam com um 'a': SELECT * FROM persons ONDE FirstNameLIKE '% a' Condição LIKE A seguinte instrução SQL retornará pessoas com primeiros nomes que contenham o padrão 'la': SELECT * FROM Persons WHERE FirstName LIKE '%la%' Condição LIKECondição LIKE ● % (porcentagem), qualquer string de zero ou mais caracteres; _ (anderscore), qualquer caractere simples; ● [] (colchetes), qualquer caractere simples dentro da série especificada; ● [^] (colchetes e acento circunflexo), qualquer caractere simples fora da série especificada. Condição LIKE Ordenando tuplas com Order By ● Exemplo: Liste em ordem alfabética os funcionarios que trabalham no departamento financeiro select distinct funcionario.nome from funcionario, departamento where funcionario.codDepto=departamento.codDepto AND departamento.nome=‘financeiro’ order by funcionario.nome ● Order by pode ser em ordem descentente – Exemplo: order by nome desc A instrução UPDATE é usada para modificar os dados em uma tabela. Syntax UPDATE table_name SET column_name = new_value WHERE column_name = some_value UPDATEUpdate LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger Rasmussen Storgt 67 Queremos adicionar um primeiro nome para a pessoa com um sobrenome de "Rasmussen": UPDATE Person SET FirstName = 'Nina' WHERE LastName = 'Rasmussen' LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger Rasmussen Nina Storgt 67 UPDATEUpdate Queremos mudar o endereço e adicionar o nome da cidade: UPDATE Person SET Address = 'Stien 12', City = 'Stavanger' WHERE LastName = 'Rasmussen' LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger Rasmussen Nina Stien 12 Stavanger LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger Rasmussen Storgt 67 UPDATEUpdate A instrução DELETE é usado para apagar linhas de uma tabela. Syntax DELETE FROM table_name WHERE column_name = some_value Delete LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger Rasmussen Nina Stien 12 Stavanger "Nina Rasmussen" vai ser excluído DELETE FROM Person WHERE LastName = 'Rasmussen' LastName FirstName Address City Nilsen Fred Kirkegt 56 Stavanger DELETEDelete DML – CONSULTANDO DADOS EM TABELAS ● Ligação entre tabelas (Join) ● Diz-se que tabelas estão relacionadas se tiverem campos comuns (ch.primária e ch. estrangeira). ● O efeito do JOIN é a criação de uma tabela temporária em que cada par de linhas, que satisfação a condição de ligação, são ligados para formar uma única linha. ● A ligação é sempre estabelecida à frente da cláusula WHERE usando o operador relacional da igualdade (=). FROM estabelece o produto cartesiano entre as tabelas listadas WHERE filtra as linhas úteis segundo a condição especificada Comando SQL SELECT nome_emp, salario_base, nome_dept FROM Empregado, Departamento, Categoria WHERE nome_emp = ´António Abreu´ AND Empregado.cod_cat = Categoria.cod_cat AND Departamento.cod_dept = Empregado. cod_dept SELECT nome_emp, salario_base, nome_dept FROM Empregado, Departamento, Categoria WHERE nome_emp = ´António Abreu´ AND Empregado.cod_cat = Categoria.cod_cat AND Departamento.cod_dept = Empregado. cod_dept Qual o salário do empregado ´António Abreu´ e o nome do departamento a que pertence? Projecção SELECT cod_emp, nome_emp FROM empregado Clausulas Clausulas Select Select FromFrom cod_emp nome_emp data_admissão cod_cat cod_dept cod_emp_chefe 1 António Abreu 13-Jan-75 1 1 1 2 Bernardo Bento 1-Dec-81 1 2 1 3 Carlos Castro 4-Jun-84 3 3 1 ... ... ... ... ... ... 20 Manuel Matos 7-Feb-90 3 2 2 ... ... ... ... ... ... Empregado Restrição SELECT * FROM categoria WHERE salario_base > 200 Clausula WhereClausula Where Categoria cod_cat designação salario_base 1 CategoriaA 300 2 CategoriaB 250 3 CategoriaC 160 ... ... ... Junção A partir do produto cartesiano selecciona-se somente as linhas que satisfazem a condição EMPREGADO.COD_DEPT= DEPTARTAMENTO.COD_DEPT cod_emp nome_emp data_admissão cod_cat cod_dept cod_emp_chefe 1 António Abreu 13-Jan-75 1 1 1 2 Bernardo Bento 1-Dec-81 1 2 1 3 Carlos Castro 4-Jun-84 3 3 1 ... ... ... ... ... ... 20 Manuel Matos 7-Feb-90 3 2 2 ... ... ... ... ... ... Empregado cod_dept nome_dept localização 1 Contabilida Lisboa 2 VendasPorto 3 Investigação Coimbra ... ... ... Departamento Junção SELECT nome_emp, empregado.cod_dept, nome_dept FROM empregado, departamento WHERE empregado.cod_dept = departamento.cod_dept Caso o nome de uma coluna seja igual em várias tabelas então a REGRA é Nome_Tabela.Nome_Coluna em qualquer sítio da cláusula SELECT Projecção, Restrição e Junção SELECT empregado.cod_dept, nome_emp FROM empregado, departamento WHERE empregado.cod_dept = departamento.cod_dept AND nome_dept = 'Vendas' Restrição Junção Projecção Qual o nome dos empregados pertencentes ao departamento de Vendas Aliases de Tabelas Correlation Name Pretende-se o nome de cada empregado e o nome do respectivo chefe SELECT E.nome, CH.nome FROM empregado E, empregado CH WHERE E.cod_emp_chefe = CH.cod_emp SELECT cod_emp, D.cod_dept, nome_dept FROM empregado E, departamento D WHERE E.cod_dept = D.cod_dept Particularmente útil quando se pretende usar a mesma tabela com significados diferentes Junções Múltiplas cod_emp nome_emp data_admissão cod_cat cod_dept cod_emp_chefe 1 António Abreu 13-Jan-75 1 1 1 2 Bernardo Bento 1-Dec-81 1 2 1 3 Carlos Castro 4-Jun-84 3 3 1 ... ... ... ... ... ... 20 Manuel Matos 7-Feb-90 3 2 2 ... ... ... ... ... ... Empregado cod_cat designação salario_base 1 CategoriaA 300 2 CategoriaB 250 3 CategoriaC 160 ... ... ... Categoria cod_dept nome_dept localização 1 Contabilidade Lisboa 2 Vendas Porto 3 Investigação Coimbra ... ... ... Departamento Junções Múltiplas SELECT categoria.cod_cat, nome_emp, nome_dept, salario_base FROM empregado, departamento, categoria WHERE empregado.cod_dept = departamento.cod_dept AND empregado.cod_cat = categoria.cod_cat Para cada categoria listar o nome dos empregados, salário_base e repectivo departamento Texto 2. Implementando Integridade Referencial no MySQL ● Para adicionarmos restrições de integridade (constraints) às chaves estrangeiras, é necessário criar as tabelas como InnoDB. 2.1.1. MyISAM ● Bom desempenho na leitura de dados – Índices em árvores binárias balanceadas; – Arquitetura simplificada. ● Desvantagens – Não oferece mecanismos para controle de transação e mecanismos de integridade referencial; – Mecanismo de lock (geral) por tabela. 2.1.2. InnoDB ● Desenvolvido pela InnoDBase e integrado ao MySQL a partir da versão 4.0. ● Vantagens: – Integridade referencial (SET NULL, RESTRICT, etc); – Ferramenta para backup on-line; – Lock de registro; – Níveis de isolamento; ● Exige mais memória e disco que o MyISAM. Apresenta mais lento em algumas situações. Tipos de Restrições ● CASCADE: ao se remover um registro da tabela referenciada pela chave estrangeira os registros relacionados àquele removido serão eliminados em todas as tabelas relacionadas. ● RESTRICT:não permite a remoção de registros que possuam relacionamentos em outras tabelas. ● SET NULL e SET DEFAULT. atribuem os valores DEFAULT ou NULL para as chaves estrangeiras cujos registros relacionados foram excluídos. Exemplo ● CREATE TABLE aluno ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nome CHAR(30) NOT NULL ) TYPE=InnoDB; ● CREATE TABLE cursos ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nome CHAR(30) NOT NULL ) TYPE=InnoDB; ● CREATE TABLE notas ( aluno_id INT NOT NULL, cursos_id INT NOT NULL, date DATE NOT NULL, nota DOUBLE NOT NULL, PRIMARY KEY(aluno_id, cursos_id, date), FOREIGN KEY (aluno_id) REFERENCES aluno(id) ON DELETE CASCADE, FOREIGN KEY (cursos_id) REFERENCES cursos(id) ON DELETE RESTRICT ) TYPE=InnoDB; Explicação ● A tabela cursos que contém as disciplinas ministradas e a tabela notas com os pontos dos alunos em todos os cursos freqüentados por eles. ● No modelo é possível que um curso possua várias avaliações em datas distintas. Neste caso, foram criadas as tabelas como tipo InnoDB (TYPE=InnoDB), para que as regras de integridade sejam respeitadas. As regras definidas foram: um CASCADE para aluno, isto é, se for removido um registro da tabela de aluno, todas as suas notas serão removidas automaticamente. ● No caso da tabela de cursos, não será possível remover um curso que possua notas cadastradas para ele. ● Além da restrição ON DELETE, o InnoDB permite também o ON UPDATE, que aplica as restrições no caso de atualizações dos campos ralacionados entre as tabelas. Diapositivo 1 Diapositivo 2 Diapositivo 3 Diapositivo 4 Diapositivo 5 Diapositivo 6 Diapositivo 7 Diapositivo 8 Diapositivo 9 Diapositivo 10 Diapositivo 11 Diapositivo 12 Diapositivo 13 Diapositivo 14 Diapositivo 15 Diapositivo 16 Diapositivo 22 Diapositivo 23 Diapositivo 24 Diapositivo 25 Diapositivo 26 Diapositivo 27 Diapositivo 28 Comando SQL Projecção Restrição Junção Diapositivo 38 Projecção, Restrição e Junção Aliases de Tabelas Junções Múltiplas Diapositivo 42 Diapositivo 45 Diapositivo 46 Diapositivo 47 Diapositivo 48 Diapositivo 50 Diapositivo 51 Diapositivo 52