Aprofundamento de DDL e DML

6,152 views

Published on

Published in: Education
3 Comments
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
6,152
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
192
Comments
3
Likes
0
Embeds 0
No embeds

No notes for slide

Aprofundamento de DDL e DML

  1. 1. Tópicos Especiais em Desenvolvimento de Software Aprofundamento de DDL & DML Objetivo: Resgatar recursos avançados de bancos de dados Prof. Nécio de Lima Veras
  2. 2. Parte I : DDL
  3. 3. Relembrando DDL • Qual sua serventia? • Possui conjuntos de: – Domínios (incluindo o valor null); – Comandos: • Create (database, table, ...); • Alter; • P/ restrições de integridades (chaves, valores com checagens, valor padrão, valor único, valor não nulo, referencial); • Certo, e agora o que podemos ter de novidade?
  4. 4. Eis algumas novidades... • Criação de domínios; • Criação de índices; • Criação de gatilhos; • Criação de procedimentos; • Criação de funções; • Criação de visões;
  5. 5. Criação de Domínios • Útil para padronizações; • Comando: create domain <identificador> <tipo> [opções] • 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 não implementa;
  6. 6. Apagando um domínio • drop domain <identificador>; • Cuidado, pois você poderá estar usando o domínio;
  7. 7. Criação de Índices • Serve para otimizações de consultas; • Para as chaves já são criados índices automáticos; • Sintaxe: create index <identificador> on <tabela> (coluna [ asc || desc] [, ...]); • Exemplos: create index idx_notaR on TBNotas (nNotaR asc); create index idx_inicioNome on tbAluno (vNome (10)); → note a diferença (este pega apenas os 10 primeiros caracteres do nome);
  8. 8. Mais sobre índices • Sintaxe do Comando p/ excluir: drop index <identificador> on <tabela>; Exemplo: drop index idx_notaR on tbNotas; • Visualizando (mySQL): – show index from tbNotas;
  9. 9. Gatilhos (triggers) • Servem como armas prontas para serem disparadas; • Sintaxe do comando (mySQL): create trigger <identificador> <tempo> <evento> on <tabela> for each row begin end – Tempo: Before ou After; – Evento: Insert, Update ou Delete;
  10. 10. Gatilhos (triggers) • Limitações (mySQL): – Não pode realizar chamadas a procedimentos ou funções que retornem dados ou usam comandos SQL dinâmicos, por exemplo: now(); – Não pode ter comandos explícitos de controle de transações, por exemplo: commit ou rollback;
  11. 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. 12. Exibindo os gatilhos (mySQL) • Comando: show triggers from <database>; – Exemplo: show triggers from dbTeste; • Excluindo: – drop trigger <nome_da_trigger>; – Exemplo: drop trigger dataNascNull;
  13. 13. Criação de Procedimentos • Serve para promover: – Modularização; – Refatoração; – E evitar códigos duplicados; • Sintaxe do comando (mySQL): create procedure <identificador> ([tipo_parametro] <identificador_parâmetro> <tipo> [,...]) begin end; • Observações: – Tipo_Parâmetro: in , out ou inout;
  14. 14. Exemplos de Procedimento • Criando: create procedure addAluno (in nome varchar(30)) begin insert into tbAluno (vNome) values (nome); end; • Executando: call addAluno ('Nécio Veras'); • Excluindo: drop procedure addAluno; • Visualizando: select * from information_schema.routines; ou show procedure status;
  15. 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. 16. Funções • Retornam valores (podem inclusive serem calculados); • Também servem para criar UDF's (Funções definidas por usuários); • Sintaxe do comando: create function <identificador> (<identificador_parâmetro> <tipo> [,...]) returns <tipo> begin end;
  17. 17. Exemplo • Retornando a média: 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. 18. Visões • É um select pré-moldado, serve para personalizar comandos de consulta e deixá- los preparados para a execução; • Sintaxe do comando: create view <identificador> [<lista de colunas>] as <comando select>; • Exemplo: create view listaAlunos (cod, nome) as select id, vNome from tbAluno; • Visualizando: select * from listaAlunos ;
  19. 19. Exercícios • Abstraia e crie um banco qualquer (com 3 tabelas que se relacionem) – Crie índices que possam agilizar possíveis consultas futuras; – Crie gatilhos que possam ser úteis ao banco de dados; – Crie procedimentos que padronize as operações CRUD em TODAS as tabelas; – Crie funções que possam agilizar possíveis cálculos; – Crie visões que forneçam suporte para a construção de relatórios (a serem imaginados por você!)
  20. 20. Parte II - DML
  21. 21. Aprofundando • Sabemos que existem as operações CRUD que servem como base para a DML; • O aprofundamento se dá, principalmente, no comando de RETRIVE; – SELECT; • As outras operações, praticamente, não existem variações dentre o que já foi exposto;
  22. 22. Relembrando... • Formatação básica: select A1, A2, A3, ..., An from r1, r2, ..., rm where P onde Ai representa um atributo ri é uma (relação) tabela P é um predicado (condição/critério de seleção).
  23. 23. A cláusula BETWEEN • Especifica intervalos (inclusive); • Ex: SELECT numero_emprestimo FROM emprestimo WHERE total BETWEEN 90 AND 100; • Similarmente, temos o NOT BETWEEN;
  24. 24. A cláusula From • Define um produto cartesiano das relações; – A junção natural é definida em termos de produto cartesiano; • Exemplo: – Queremos a seguinte consulta: “para todos os clientes que tenham um empréstimo em um banco, encontre seus nomes e números de empréstimos”; – Em SQL: SELECT distinct nome_cliente, devedor.numero_emprestimo FROM devedor, emprestimo WHERE devedor.numero_emprestimo = emprestimo.numero_emprestimo – Observe as especificações de <tabela>.<coluna> , pois isso servirá para evitar AMBIGUIDADES;
  25. 25. A cláusula As • Como as tabelas podem possuir nomes relativamente grandes, então podemos “apelidá-las” usando a cláusula 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. 26. Cláusula Like • É aplicado em operações de Strings; • Serve para checar coincidências de pares; • Elementos: % => Compara qualquer substring; _ => Compara qualquer caractere; • Lembre-se que são sensíveis 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; • Também podemos usar o NOT LIKE;
  27. 27. Cláusula Order By • Serve para ordenar as tuplas resultantes de uma consulta; • Temos duas opções: – Asc => Ascendente; – Desc => Descendente; • Pode ordenar qualquer tipo de atributo; • Exemplo: SELECT * FROM emprestimo ORDER BY total DESC, numero_emprestimo ASC;
  28. 28. A Cláusula Join • Compõem mecanismos de junção de DUAS relações, são eles: – Junção condicional; – Junção natural; – Junção externa; – Outras... • Tipos de junção: – Define como as tuplas de cada relação irão se corresponder e quais atributos serão incluídos no resultado final; – São eles: • Inner Join (junção interna); • Outer Join (junção externa); – São opcionais estas especificações; – Tipos de condições: • Natural; • On; • Using;
  29. 29. Junção Interna • É quando tuplas são incluídas no resultado de uma consulta somente se existir uma correspondente na outra relação; • Exemplo: SELECT tabela1.atributo1, tabela2.atributo2 FROM tabela1 INNER JOIN tabela2 ON tabela1.atributo1 = tabela2.atributo2; • Se o nome dos atributos for igual, não há necessidade da cláusula ON, basta usar o NATURAL; SELECT tabela1.atributo1, tabela2.atributo2 FROM tabela1 NATURAL JOIN tabela2; – Neste caso, a cláusula INNER também não precisa;
  30. 30. Junção Externa • É quando tuplas são incluídas no resultado sem que exista uma tupla correspondente na outra relação; • Tipos: – RIGHT OUTER JOIN = Junção Externa a Direita; – LEFT OUTER JOIN = Junção Externa a Esquerda; – FULL OUTER JOIN = Junção Externa Total (Junção Externa a Esquerda + Junção 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. 31. Operações de Conjunto • Possuímos as operações de União, Interseção e Exceção (exceto ou subtração); • Exemplo de união: (SELECT nome_cliente FROM depositante) UNION (SELECT nome_cliente FROM devedor); • Esta operação, automaticamente, eliminina as repetições; – Se isso não for desejado então usa-se UNION ALL; – E isso é válido para TODAS as operações de conjunto;
  32. 32. Operações de conjunto • De forma análoga à união, temos: – Interseção : intersect; – Exceção: except;
  33. 33. Funções agregadas • São funções simples que parte de um conjunto de dados (valores) e retorna uma valor simples (único); • Exemplos: – Média (average): avg; – Mínimo (minimum): min; – Máximo (maximum): max; – Total (total): sum; – Contagem (count): count; – Desvio Padrão: stddev; • Exemplo: SELECT avg(saldo) FROM conta WHERE nome_agencia = ‘Parnaíba-Central’;
  34. 34. A cláusula Group By • Existem circunstância em que gostaríamos de aplicar uma função agregada não somente a um conjunto de tuplas, mas também a um grupo de conjunto de tuplas; • Isso é possível usando a cláusula SQL group by; • Exemplo: 'Encontrar a média dos saldos nas contas de cada uma das agências do banco': SELECT nome_agencia, avg(saldo) FROM conta GROUP BY nome_agencia;
  35. 35. Leia sobre ... • Existem ainda muitas outras coisas que devem ser pesquisadas e estudadas, tais como: – Subconsultas (Cláusulas IN, SOME, ALL, EXISTS, UNIQUE); – Subconsultas escalares;
  36. 36. Exercícios

×