aprofundamento de ddl e dml

Download Aprofundamento de DDL e DML

If you can't read please download the document

Upload: necio-de-lima-veras

Post on 06-Jun-2015

5.333 views

Category:

Education


0 download

TRANSCRIPT

  • 1. Tpicos Especiais em Desenvolvimento de Software Aprofundamento de DDL & DML Objetivo: Resgatar recursos avanados de bancos de dados Prof. Ncio de Lima Veras

2. Parte I : DDL 3. Relembrando DDL Qual sua serventia? Possui conjuntos de: Domnios (incluindo o valor null); Comandos: Create (database, table, ...); Alter; P/ restries de integridades (chaves, valores com checagens, valor padro, valor nico, valor no nulo, referencial); Certo, e agora o que podemos ter de novidade? 4. Eis algumas novidades... Criao de domnios; Criao de ndices; Criao de gatilhos; Criao de procedimentos; Criao de funes; Criao de vises; 5. Criao de Domnios til para padronizaes; Comando: create domain [opes] Exemplos: 1)create domain nomePessoa varchar(45); 2)create domain codigos int not null default autoincrement; 3)create domain combustiveis varchar(15) check (combustiveis in ('Gasolina', 'Alcool', 'Diesel', 'Flex')); Detalhe, o mySQL no implementa; 6. Apagando um domnio drop domain ; Cuidado, pois voc poder estar usando o domnio; 7. Criao de ndices Serve para otimizaes de consultas; Para as chaves j so criados ndices automticos; Sintaxe: create index on (coluna [ asc || desc] [, ...]); Exemplos: create index idx_notaR on TBNotas (nNotaR asc); create index idx_inicioNome on tbAluno (vNome (10)); note a diferena (este pega apenas os 10 primeiros caracteres do nome); 8. Mais sobre ndices Sintaxe do Comando p/ excluir: drop index on ; Exemplo: drop index idx_notaR on tbNotas; Visualizando (mySQL): show index from tbNotas; 9. Gatilhos (triggers) Servem como armas prontas para serem disparadas; Sintaxe do comando (mySQL): create trigger on for each row begin end Tempo: Before ou After; Evento: Insert, Update ou Delete; 10. Gatilhos (triggers) Limitaes (mySQL): No pode realizar chamadas a procedimentos ou funes que retornem dados ou usam comandos SQL dinmicos, por exemplo: now(); No pode ter comandos explcitos de controle de transaes, por exemplo: commit ou rollback; 11. Gatilhos (triggers) Exemplo (o campo dDataNasc SEMPRE ser null): delimiter ! create trigger dataNascNull before insert on tbAluno for each row begin if new.dDataNasc is not null then set new.dDataNasc = null; end if; end; ! delimiter ; 12. Exibindo os gatilhos (mySQL) Comando: show triggers from ; Exemplo: show triggers from dbTeste; Excluindo: drop trigger ; Exemplo: drop trigger dataNascNull; 13. Criao de Procedimentos Serve para promover: Modularizao; Refatorao; E evitar cdigos duplicados; Sintaxe do comando (mySQL): create procedure ([tipo_parametro] [,...]) begin end; Observaes: Tipo_Parmetro: in , out ou inout; 14. Exemplos de Procedimento Criando: create procedure addAluno (in nome varchar(30)) begin insert into tbAluno (vNome) values (nome); end; Executando: call addAluno ('Ncio Veras'); Excluindo: drop procedure addAluno; Visualizando: select * from information_schema.routines; ou show procedure status; 15. Exemplo de um procedimento com retorno Criando o procedimento: create procedure recuperaAluno (in cod int, out nome varchar(30), dataNasc date) begin select vNome, dDataNasc from tbAluno where id = cod into nome, dataNasc; end; Executando: call listaAluno (10, @nm, @dt); Exibindo o resultado: select @nm, @dt 16. Funes Retornam valores (podem inclusive serem calculados); Tambm servem para criar UDF's (Funes definidas por usurios); Sintaxe do comando: create function ( [,...]) returns begin end; 17. Exemplo Retornando a mdia: create function calcMedia (codNota int) returns numeric(4,1) begin declare n1 numeric(4,1); declare n2 numeric(4,1); select nNota1, nNota2 from tbNotas where iNota_id = codNota into n1, n2; return (n1 + n2) / 2; end; Executando: select calcMedia (101); 18. Vises um select pr-moldado, serve para personalizar comandos de consulta e deix- los preparados para a execuo; Sintaxe do comando: create view [] as ; Exemplo: create view listaAlunos (cod, nome) as select id, vNome from tbAluno; Visualizando: select * from listaAlunos ; 19. Exerccios Abstraia e crie um banco qualquer (com 3 tabelas que se relacionem) Crie ndices que possam agilizar possveis consultas futuras; Crie gatilhos que possam ser teis ao banco de dados; Crie procedimentos que padronize as operaes CRUD em TODAS as tabelas; Crie funes que possam agilizar possveis clculos; Crie vises que forneam suporte para a construo de relatrios (a serem imaginados por voc!) 20. Parte II - DML 21. Aprofundando Sabemos que existem as operaes CRUD que servem como base para a DML; O aprofundamento se d, principalmente, no comando de RETRIVE; SELECT; As outras operaes, praticamente, no existem variaes dentre o que j foi exposto; 22. Relembrando... Formatao bsica: select A1, A2, A3, ..., An from r1, r2, ..., rm where P onde Ai representa um atributo ri uma (relao) tabela P um predicado (condio/critrio de seleo). 23. A clusula BETWEEN Especifica intervalos (inclusive); Ex: SELECT numero_emprestimo FROM emprestimo WHERE total BETWEEN 90 AND 100; Similarmente, temos o NOT BETWEEN; 24. A clusula From Define um produto cartesiano das relaes; A juno natural definida em termos de produto cartesiano; Exemplo: Queremos a seguinte consulta: para todos os clientes que tenham um emprstimo em um banco, encontre seus nomes e nmeros de emprstimos; Em SQL: SELECT distinct nome_cliente, devedor.numero_emprestimo FROM devedor, emprestimo WHERE devedor.numero_emprestimo = emprestimo.numero_emprestimo Observe as especificaes de . , pois isso servir para evitar AMBIGUIDADES; 25. A clusula As Como as tabelas podem possuir nomes relativamente grandes, ento podemos apelid-las usando a clusula As; O mesmo comando anterior ficaria: SELECT distinct nome_cliente, d.numero_emprestimo FROM devedor as d, emprestimo as e WHERE d.numero_emprestimo = e.numero_emprestimo Pode ser aplicado no nome da tabela ou no nome do campo; No caso do nome do campo ser apelidada a coluna do resultado da consulta; 26. Clusula Like aplicado em operaes de Strings; Serve para checar coincidncias de pares; Elementos: % => Compara qualquer substring; _ => Compara qualquer caractere; Lembre-se que so sensveis ao caso; Exemplo: SELECT nome_cliente FROM cliente WHERE rua_cliente LIKE %Avenida%; Outros exemplos: 'Francisco%' => Qualquer valor que inicie com Francisco; '_ _ _' => Qualquer string que tenha 3 caracteres; Tambm podemos usar o NOT LIKE; 27. Clusula Order By Serve para ordenar as tuplas resultantes de uma consulta; Temos duas opes: Asc => Ascendente; Desc => Descendente; Pode ordenar qualquer tipo de atributo; Exemplo: SELECT * FROM emprestimo ORDER BY total DESC, numero_emprestimo ASC; 28. A Clusula Join Compem mecanismos de juno de DUAS relaes, so eles: Juno condicional; Juno natural; Juno externa; Outras... Tipos de juno: Define como as tuplas de cada relao iro se corresponder e quais atributos sero includos no resultado final; So eles: Inner Join (juno interna); Outer Join (juno externa); So opcionais estas especificaes; Tipos de condies: Natural; On; Using; 29. Juno Interna quando tuplas so includas no resultado de uma consulta somente se existir uma correspondente na outra relao; Exemplo: SELECT tabela1.atributo1, tabela2.atributo2 FROM tabela1 INNER JOIN tabela2 ON tabela1.atributo1 = tabela2.atributo2; Se o nome dos atributos for igual, no h necessidade da clusula ON, basta usar o NATURAL; SELECT tabela1.atributo1, tabela2.atributo2 FROM tabela1 NATURAL JOIN tabela2; Neste caso, a clusula INNER tambm no precisa; 30. Juno Externa quando tuplas so includas no resultado sem que exista uma tupla correspondente na outra relao; Tipos: RIGHT OUTER JOIN = Juno Externa a Direita; LEFT OUTER JOIN = Juno Externa a Esquerda; FULL OUTER JOIN = Juno Externa Total (Juno Externa a Esquerda + Juno Externa a Direita); Exemplo: SELECT R1.A1, R2.A2 FROM R1 RIGHT OUTER JOIN R2 ON R1.A1= R2.A2; ou SELECT R1.A1, R2.A2 FROM R1 LEFT OUTER JOIN R2 ON R1.A1= R2.A2; 31. Operaes de Conjunto Possumos as operaes de Unio, Interseo e Exceo (exceto ou subtrao); Exemplo de unio: (SELECT nome_cliente FROM depositante) UNION (SELECT nome_cliente FROM devedor); Esta operao, automaticamente, eliminina as repeties; Se isso no for desejado ento usa-se UNION ALL; E isso vlido para TODAS as operaes de conjunto; 32. Operaes de conjunto De forma anloga unio, temos: Interseo : intersect; Exceo: except; 33. Funes agregadas So funes simples que parte de um conjunto de dados (valores) e retorna uma valor simples (nico); Exemplos: Mdia (average): avg; Mnimo (minimum): min; Mximo (maximum): max; Total (total): sum; Contagem (count): count; Desvio Padro: stddev; Exemplo: SELECT avg(saldo) FROM conta WHERE nome_agencia = Parnaba-Central; 34. A clusula Group By Existem circunstncia em que gostaramos de aplicar uma funo agregada no somente a um conjunto de tuplas, mas tambm a um grupo de conjunto de tuplas; Isso possvel usando a clusula SQL group by; Exemplo: 'Encontrar a mdia dos saldos nas contas de cada uma das agncias do banco': SELECT nome_agencia, avg(saldo) FROM conta GROUP BY nome_agencia; 35. Leia sobre ... Existem ainda muitas outras coisas que devem ser pesquisadas e estudadas, tais como: Subconsultas (Clusulas IN, SOME, ALL, EXISTS, UNIQUE); Subconsultas escalares; 36. Exerccios