A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Capítulo 3: SQL.

Apresentações semelhantes


Apresentação em tema: "Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Capítulo 3: SQL."— Transcrição da apresentação:

1 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Capítulo 3: SQL

2 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Capítulo 3: SQL n Definição de dados n Estrutura básica das consultas SQL n Operações de conjunto n Funções agregadas n Valores nulos n Subconsultas aninhadas n Consultas complexas n Views n Modificação do banco de dados n Relações juntadas **

3 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan História n Linguagem IBM Sequel desenvolvida como parte do projeto System R no IBM San Jose Research Laboratory n Renomeada para Structured Query Language (SQL) n Padrão SQL ANSI e ISO: l SQL-86 l SQL-89 l SQL-92 l SQL:1999 (nome da linguagem se tornou concordante com o Ano 2000!) l SQL:2003 n Os sistemas comerciais oferecem a maioria, se não todos, os recursos da SQL-92, além de conjuntos de recursos variáveis dos últimos padrões e recursos proprietários especiais. l Nem todos os exemplos aqui podem funcionar em seu sistema específico.

4 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Linguagem de definição de dados Permite a especificação não só de um conjunto de relações, mas também de informações sobre cada relação, incluindo: l O esquema para cada relação l O domínio dos valores associados a cada atributo l As restrições de integridade l O conjunto dos índices a serem mantidos para cada relação l As informações de segurança e autorização para cada relação l A estrutura de armazenamento físico de cada relação no disco

5 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Tipos de domínio na SQL n char(n). String de caracteres de tamanho fixo com tamanho n especificado pelo usuário. n varchar(n). String de caracteres de tamanho variável com tamanho n máximo especificado pelo usuário. n int. Inteiro (um subconjunto finito de inteiros que é dependente da máquina). n smallint. Inteiro pequeno (um subconjunto dependente da máquina do tipo de domínio inteiro). n numeric(p,d). Número de ponto fixo, com precisão de p dígitos especificada pelo usuário, com n dígitos à direita do ponto decimal. n real, double precision. Números de ponto flutuante e ponto flutuante de precisão dupla com precisão dependente da máquina. n float(n). Número de ponto flutuante, com precisão de pelo menos n dígitos. n Mais são abordados no Capítulo 4.

6 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Construção de Create Table n Uma relação SQL é definida usando o comando create table: – create table r (A 1 D 1, A 2 D 2,..., A n D n, (restrição-de-integridade 1 ),..., (restrição-de-integridade k )) l r é o nome da relação l cada A i é o nome de um atributo no esquema da relação r l D i é o tipo de domínio dos valores no domínio do atributo A i n Exemplo: – create table agência (nome_agênciachar(15) not null, cidade_agênciachar(30), ativointeger)

7 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Restrições de integridade em Create Table n not null n primary key (A 1,..., A n ) Exemplo: Declare nome_agência como a chave primária para agência e certifique-se de que os valores de ativo não sejam negativos. create table agência (nome_agência char(15), cidade_agência char(30), ativo integer, chave primária (nome_agência)) Declaração de chave primária em um atributo assegura not null automaticamente na SQL-89 em diante; precisa ser declarada explicitamente na SQL-89

8 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Construções Drop Table e Alter Table n O comando drop table exclui do banco de dados todas as informações sobre a relação removida. n O comando alter table é usado para acrescentar atributos a uma relação existente: – alter table r add A D – onde A é o nome do atributo a ser acrescentado à relação r e D é o domínio de A. l A todas as tuplas na relação é atribuído nulo como o valor para o novo atributo. n O comando alter table também pode ser usado para descartar atributos de uma relação: – alter table r drop A – onde A é o nome de um atributo da relação r l O descarte de atributos não é aceito por muitos bancos de dados.

9 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Estrutura básica das consultas A SQL é baseada em operações de conjunto e relacionais com certas modificações e melhorias Uma componente SQL típica tem a forma: select A1, A2,..., An from r1, r2,..., rm where P Ai representa um atributo Ri representa uma relação P é um predicado. Essa consulta é equivalente à expressão de álgebra relacional. O resultado de uma consulta SQL é uma relação.

10 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan A cláusula select n A cláusula select lista os atributos desejados no resultado de uma consulta l corresponde à operação projeção da álgebra relacional n Exemplo: Encontre os nomes de todas as agências na relação empréstimo: select nome_agência from empréstimo n Na álgebra relacional, a consulta seria: – Õ nome_agência (empréstimo) n NOTA: Os nomes SQL não fazem distinção entre letras maiúsculas e minúsculas. l Algumas pessoas usam maiúsculas sempre que usamos o estilo negrito.

11 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan A cláusula select (cont.) n A SQL permite duplicatas nas relações bem como nos resultados de consulta. n Para forçar a eliminação de duplicatas, insira a palavra-chave distinct após select. n Encontre os nomes de todas as agências na relação empréstimo e remova as duplicatas. – select distinct nome_agência from empréstimo n A palavra-chave all especifica que as duplicatas não são removidas. – select all nome_agência from empréstimo

12 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan A cláusula select (cont.) n Um asterisco na cláusula select indica “todos os atributos” – select * from empréstimo n A cláusula select pode conter expressões aritméticas envolvendo os operadores +, , * e / operando em constantes ou atributos de tuplas. n A consulta: – select número_empréstimo, nome_agência, quantia * 100 from empréstimo – retornará uma relação que é a mesma relação empréstimo, exceto que o atributo quantia é multiplicado por 100.

13 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan A cláusula where n A cláusula where especificam condições que o resultado precisa satisfazer l Corresponde ao predicado de seleção da álgebra relacional. n Para encontrar todos os números de empréstimo para empréstimos feitos na agência Perryridge com quantias superiores a US$1200: – select número_empréstimo from empréstimo where nome_agência = ‘ Perryridge’ and quantia > 1200 n Os resultados da comparação podem ser combinados usando os conectivos lógicos and, or, e not. n As comparações podem ser aplicadas aos resultados das expressões aritméticas.

14 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan A cláusula where (cont.) n A SQL inclui um operador de comparação between Exemplo: Encontre o número de empréstimo dos empréstimos com quantias entre US$ e US$ (ou seja,  US$ and  US$ ) – select número_empr from empréstimo where quantia between and

15 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan A cláusula from n A cláusula from lista as relações envolvidas na consulta l Corresponde à operação de produto cartesiano da álgebra relacional. n Encontre o produto cartesiano tomador X empréstimo – select * from tomador, empréstimo n Encontre os nomes de cliente, os números de empréstimo e as quantias de empréstimo para todos os empréstimos da agência Perryridge select nome_cliente, tomador.número_empréstimo, quantia from tomador, empréstimo where tomador.número_empréstimo = empréstimo.número_empréstimo and nome_agência = ‘Perryridge’

16 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan A operação de renomeação n A SQL permite renomear relações e atributos usando a cláusula as: – nome-antigo as nome-novo n Encontre o nome, o número de empréstimo e a quantia de empréstimo de todos os clientes; renomeie a coluna número_empréstimo como empréstimo_id. select nome_cliente, tomador.número_empréstimo as id_empréstimo, quantia from tomador, empréstimo where tomador.número_empréstimo = empréstimo.número_empréstimo

17 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Variáveis de tupla n As variáveis de tupla são definidas na cláusula from por meio da cláusula as. n Encontre os nomes de cliente, os números de empréstimo e a quantia para todos os clientes que têm um empréstimo em alguma agência. select nome_cliente, T.número_empréstimo, S.quantia from tomador as T, empréstimo as S where T.número_empréstimo = S.número_empréstimo n Encontre os nomes de todas as agências que têm ativos maiores do que pelo menos uma agência localizada em Brooklyn select distinct T.nome_agência from agência as T, agência as S where T.ativo > S.ativo and S.cidade_agência = ‘Brooklyn’

18 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Operações de string n A SQL incui um operador de correspondência de string para comparações em strings de caractere. O operação like usa padrões que são descritos usando dois caracteres especiais: l Porcentagem (%): O caractere % corresponde a qualquer substring. l Sublinhado (_): O caractere _ corresponde a qualquer caractere. n Encontre os nomes de todos os clientes cujos endereços de rua incluem a substring ‘Main’. – select nome_cliente from cliente where rua_cliente like ‘ %Main% ’ n Localize o nome “Main%” – like ‘ Main\% ’ escape ‘ \ ’ n A SQL aceita várias operações de string como l concatenação (usando “||”) l conversão de maiúscula em minúscula (e vice-versa) l localização do tamanho da string, extração de substrings etc.

19 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Ordenação da exibição de tuplas n Liste em ordem alfabética todos os clientes que têm um empréstimo na agência Perryridge – select distinct nome_cliente from tomador, empréstimo where tomador número_empréstimo = empréstimo.número_empréstimo and nome_agência = ‘ Perryridge ’ order by nome_cliente n Podemos especificar desc para ordem decrescente ou asc para ordem crescente, para cada atributo; a ordem crescente é o padrão. l Exemplo: order by nome_cliente desc

20 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Duplicatas n Em relações com duplicatas, a SQL pode definir quantas cópias das tuplas aparecem no resultado. n Versões multiconjunto de algumas operações de álgebra relacional — dadas as relações multiconjunto r 1 e r 2,: 1.   (r 1 ): Se existem c 1 cópias da tupla t 1 em r 1, e t 1 satisfaz a seleção   então, existem c 1 cópias de t 1 em   (r 1 ). 2.  A (r ): Para cada cópia da tupla t 1 em r 1, existe uma cópia da tupla  A (t 1 ) em  A (r 1 ), onde  A (t 1 ) indica a projeção da tupla única t r 1 x r 2 : Se existem c 1 cópias da tupla t 1 em r 1 e c 2 cópias da tupla t 2 em r 2, existem c 1 * c 2 cópias da tupla t 1.t 2 em r 1  r 2.

21 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Duplicatas (cont.) n Exemplo: suponha que as relações r 1 (A,B) e r 2 (C) sejam as seguintes: – r 1 = {(1, a) (2,a)} r 2 = {(2), (3), (3)} n Então,  B (r 1 ) seria {(a), (a)}, enquanto  B (r 1 )  r 2 seria – {(a,2), (a,2), (a,3), (a,3), (a,3), (a,3)} n A semântica da duplicata SQL: – select A 1,, A 2,..., A n from r 1, r 2,..., r m where P – é equivalente à versão de multiconjunto da expressão: –  A1, A2,..., An (  P (r 1  r 2 ...  r m ))

22 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Operações de conjunto As operações SQL union, intersect e except operam em relações e correspondem às operações da álgebra relacional . n Cada uma das operações acima elimina automaticamente as duplicatas; para menter todas as duplicatas, use as versões de multiconjunto correspondentes union all, intersect all e except all. Suponha que uma tupla ocorre m vezes em r e n vezes em s; então, ela ocorre: l m + n vezes em r union all s l min(m,n) vezes em r intersect all s l max(0, m – n) vezes em r except all s

23 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Set Operations n Encontre todos os clientes do banco que possuem um empréstimo, uma conta ou as duas coisas no banco: (select nome_cliente from depositante) union (select nome_cliente from tomador) n Encontre todos os clientes que possuem um empréstimo e uma conta no banco: (select distinct nome_cliente from depositante) intersect (select distinct nome_cliente from tomador) n Encontre todos os clientes que possuem uma conta mas nenhum empréstimo no banco: (select distinct nome_cliente from depositante) except (select nome_cliente from tomador)

24 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Funções agregadas n Essas funções operam no multiconjunto dos valores de uma coluna de uma relação e retornam um valor – avg: valor médio min: valor mínimo max: valor máximo sum: soma dos valores count: número de valores

25 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Funções agregadas (cont.) n Encontre o saldo médio das contas na agência Perryridge. – select avg (saldo) from conta where nome_agência = ‘Perryridge’ n Encontre o número de tuplas na relação cliente: – select count (*) from cliente n Encontre o número de depositantes do banco: – (select count (distinct nome_cliente) from depositante

26 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Funções agregadas – group by n Encontre o número de depositantes de cada agência. (select nome_agência, count (distinct nome_cliente) from depositante, conta where depositante.número_conta = conta.número_conta group by nome_agência Nota: Os atributos na cláusula select fora das funções agregadas precisam aparecer na lista group by.

27 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Funções agregadas – Cláusula having n Encontre o nome de todas as agências onde o saldo médio é maior que US$ 1200: select nome_agência, avg (saldo) from conta group by nome_agência having avg (saldo) > 1200 Nota: Os predicados na cláusula having são aplicados após a formação de grupos, enquanto os predicados na cláusula where são aplicados antes da formação de grupos.

28 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Valores nulos n É possível que as tuplas tenham um valor nulo, indicado por nulo, para algum(ns) de seus atributos n nulo significa um valor desconhecido ou que um valor não existe. n O predicado is null pode ser usado para verificar a presença de valores nulos. l Exemplo: Encontre todos os números de empréstimo na relação empréstimo com valores nulos para quantia: – select número_empréstimo from empréstimo where quantia is null n O resultado de qualquer expressão aritmética envolvendo nulo é nulo l Exemplo: 5 + nulo retorna nulo n Entretanto, as funções aregadas simplesmente ignoram nulos l Mais no próximo slide

29 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Valores nulos e lógica de três valores n Qualquer comparação com nulo retorna desconhecido l Exemplo: 5 nulo or nulo = nulo n Lógica de três valores usando o valor de verdade desconhecido: l OR: (desconhecido or verdadeiro) = verdadeiro, (desconhecido or falso) = desconhecido (desconhecido or desconhecido) = desconhecido l AND: (verdadeiro and desconhecido) = desconhecido, (falso and desconhecido) = falso, (desconhecido and desconhecido) = desconhecido l NOT: (not desconhecido) = desconhecido l “P is unknown” evaluates to true if predicate P evaluates to desconhecido n Resultado do predicado da cláusula where é tratado como falso se avaliar para desconhecido

30 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Valors nulos e aregados n Total das quantias de empréstimo – select sum (quantia ) from empréstimo l A instrução acima ignora quantias nulas l O resultado é nulo se não houver uma quantia não nula n Todas as operações agregadas exceto count(*) ignoram tuplas com valores nulos nos atributos agregados.

31 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Subconsultas aninhadas n A SQL fornece um mecanismo para aninhar subconsultas. n Uma subconsulta é uma expressão select-from-where que é aninhada dentro de outra consulta. n Um uso comum das subconsultas é realizar testes para participação de conjuntos, fazer comparações de conjuntos e determinar cardinalidade de conjuntos.

32 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Consulta de exemplo n Encontre todos os clientes que possuem uma conta e um empréstimo no banco. select distinct nome_cliente from tomador where nome_cliente in (select nome_cliente from depositante)  Encontre todos os clientes que possuem um empréstimo no banco, mas que não têm uma conta no banco. select distinct nome_cliente from tomador where nome_cliente) not in (select nome_cliente from depositante)

33 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Consulta de exemplo n Encontre todos os clientes que possuem uma conta e um empréstimo na agência Perryridge select distinct nome_cliente from tomador, empréstimo where tomador.número_cliente = empréstimo.número_empréstimo and nome_agência = ‘Perryridge’ and (nome_agência, nome_cliente) in (select nome_agência, nome_cliente from depositante, conta where depositante.número_conta = conta.número_conta) n Nota: A consulta acima pode ser escrita de uma maneira muito mais simples. A formulação acima é simplesmente para ilustrar os recursos da SQL.

34 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Comparação de conjuntos n Encontre os nomes de todas as agências que possuem ativos maiores do que o ativo de pelo menos uma agência localizada em Brooklyn. select distinct T.nome_agência from agência as T, agência as S where T.ativo > S.ativo and S.cidade_agência = ‘Brooklyn’ n Mesma consulta usando a cláusula > some – Select ome_agência from agência where ativo > some (select ativo from agência where cidade_agência = ‘Brooklyn’)

35 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Definição da cláusula some n F some r  t  r  tal que (F t ) Onde pode ser:      (5 < some ) = verdadeiro (5 < some ) = falso (5 = some ) = verdadeiro (5  some ) = verdadeiro (já que 0  5) (= some)  in Entretanto, (  some)  not in leia: 5 < alguma tupla na relação)

36 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Consulta de exemplo n Encontre os nomes de todas as agências que possuem ativos maiores do que todas as agências localizadas em Brooklyn. select nome_agência from agência where ativo > all (select ativo from agência where cidade_agência = ‘Brooklyn’)

37 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Definição da cláusula all n F all r  t  r  (F t) (5 < all ) = falso (5 < all ) = verdadeiro (5 = all ) = falso (5  all ) = verdadeiro (já que 5  4 e 5  6) (  all)  not in Entretanto, (= all)  in

38 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Teste para relações vazias n A construção exists retorna o valor true se a subconsulta de argumento não é vazia. n exists r  r  Ø n not exists r  r = Ø

39 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Consulta de exemplo n Encontre todos os clientes que têm uma conta em todas as agências localizadas em Brooklyn. select distinct S.nome_cliente from depositante as S where not exists ((select nome_agência from agência where cidade_agência = ‘Brooklyn’) except (select R.nome_agência from depositante as T, conta as R where T.número_conta = R.número_conta and S.nome_cliente = T.nome_cliente)) n Note que X – Y = Ø  X  Y n Nota: Não é possível escrever essa consulta usando = all e suas variantes.

40 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Teste para ausência de tuplas duplicatas n A construção unique testa se uma subconsulta possui alguma tupla duplicata em seu resultado. n Encontre todos os clientes que possuem pelo menos uma conta na agência Perryridge. – select T.nome_cliente from depositante as T where unique (select R.nome_cliente from conta, depositante as R where T.nome_cliente = R.nome_cliente and R.número_conta = conta.número_conta and conta.nome_agência = ‘Perryridge’

41 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Consulta de exemplo n Encontre todos os clientes que têm pelo menos duas contas na agência Perryridge. select distinct T.nome_cliente from depositante as T where not unique (select R.nome_cliente from conta, depositante as R where T.nome_cliente = R.nome_cliente and R.número_conta = conta.número_conta and conta.nome_agência = ‘Perryridge’

42 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Relações derivadas n A SQL permite que uma expressão de subconsulta seja usada na cláusula from n Encontre o saldo médio das agências onde o saldo médio é maior que US$1200. – select nome_agência, saldo_médio from (select nome_agência, avg (saldo) from conta group by nome_agência) as média_agência (nome_agência, saldo_médio) where saldo_médio > 1200 Note que não precisamos usar a cláusula having, já que a subconsulta na cláusula from calcula o saldo médio e seu resultado é nomeado como média_agência; podemos usar os atributos de média_agência diretamente na cláusula where.

43 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Cláusula With n A cláusula with fornece uma maneira de definir uma view temporária cuja definição está disponível apenas para a consulta onde a cláusula with ocorre. n Encontre todas as contas com o saldo máximo. with saldo_máximo (valor) as select max (saldo) from conta select número_conta from conta, saldo_máximo where conta.saldo = saldo_máximo.valor

44 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Consulta complexa usando a cláusula With n Encontre todas as agências onde o depósito em conta total é maior do que a média dos depósitos totais em todas as agências. with total_agência (nome_agência, valor) as select nome_agência, sum (saldo) from conta group by nome_agência with média_total_agência (valor) as select avg (valor) from total_agência select nome_agência from total_agência, média_total_agência where total_agência.valor >= média_total_agência.valor

45 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Views n Em alguns casos, não é desejável que todos os usuários vejam o modelo lógico inteiro (ou seja, todas as relações reais armazenadas no banco de dados.) n Considere uma pessoa que precisa saber o número de empréstimo e o nome da agência de um cliente, mas não precisa ver o valor do empréstimo. Essa pessoa deve ver uma relação descrita, na SQL, por (select nome_cliente, número_empréstimo from tomador, empréstimo where tomador.número_empréstimo = empréstimo.número_empréstimo ) n Uma view fornece um mecanismo para ocultar certos dados da visão de certos usuários. n Qualquer relação que não seja do modelo conceitual mas é visível a um usuário como uma “relação virtual” é chamada uma view.

46 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Definição de view n Uma view é definida usando o comando create view, que tem a forma – create view v as – onde é qualquer expressão de consulta válida. O nome da view é representado por v. n Uma vez uma view é definida, o nome da view pode ser usado para se referir à relação virtual gerada por ela. n Definição de view não é o mesmo que criar uma nova relação avaliando a expressão de consulta. l Em vez disso, uma definição de view causa o salvamento de uma expressão; a expressão é substituída nas consultas usando a view.

47 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Consultas de exemplo n Uma view consistindo nas agências e seus clientes create view todos_clientes as (select nome_agência, nome_cliente from depositante, conta where depositante.número_conta = conta.número_conta) union (select nome_agência, nome_cliente from tomador, empréstimo where tomador.número_empréstimo = empréstimo.número_empréstimo n Encontre todos os clientes da agência Perryridge select nome_cliente from todos_clientes where nome_agência = ‘Perryridge’

48 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Views definidas usando outras views n Uma view pode ser usada na expressão que define outra view n Diz-se que uma relação de view v 1 depende diretamente de uma relação de view v 2 se v 2 é usada na expressão que define v 1 n Diz-se que uma relação de view v 1 depende da relação de view v 2 se v 1 depende diretamente de v 2 ou se existe um caminho de dependências de v 1 a v 2 n Diz-se que uma relação de view v é recursiva se ela depende de si mesma.

49 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Expansão de view Uma forma de definir o significado das views definidas em termos de outras views. Façamos a view v1 ser definida por uma expressão e1 que pode, ela própria, conter usos das relações de view. A expansão de view de uma expressão repete o seguinte passo de substituição: repeat Encontre qualquer relação de view vi em e1 Substitua a relação de view vi pela expressão que define vi until (até que) nenhuma outra relação de view esteja presente em e1 Desde que as definições de view não são recursivas, esse loop irá terminar.

50 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Modificação do banco de dados – exclusão n Exclua todas as tuplas conta na agência Perryridge delete from conta where nome_agência = ‘Perryridge’ n Exclua todas as contas em cada agência localizada em Needham. delete from conta where nome_agência in (select nome_agência from agência where cidade_agência = ‘Needham’)

51 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Consulta de exemplo n Exclua os registros de todas as contas com saldos abaixo da média no banco. delete from conta where saldo < (select avg (saldo) from conta) l Problema: Conforme excluímos tuplas do depósito, o saldo médio é modificado. l Solução usada na SQL: 1 Primeiro, calcule o saldo avg e encontre todas as tuplas a serem excluídas 2 Em seguida, exclua todas as tuplas encontradas acima (sem recalcular avg ou retestar as tuplas)

52 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Modificação do banco de dados – inserção n Insira uma nova tupla em conta – insert into conta values (‘A-9732’, ‘Perryridge’, 1200) ou equivalentemente insert into conta (nome_agência, saldo, número_conta) values (‘Perryridge’, 1200, ‘A-9732’) n Insira uma nova tupla em conta com saldo definido como nulo – insert into conta values (‘A-777’,‘Perryridge’, nulo )

53 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Modificação do banco de dados – inserção n Ofereça uma nova conta de poupança no valor de US$ 200 como um presente para todos os clientes de empréstimo da agência Perryridge Deixe que o número de empréstimo sirva como o número de conta para a conta de poupança. – insert into conta select número_empréstimo, nome_agência, 200 from empréstimo where nome_agência = ‘Perryridge’ insert into depositante select nome_cliente, número_empréstimo from tomador, empréstimo where tomador.número_empréstimo = empréstimo.número_empréstimo and nome_agência = ‘Perryridge’ n A instrução select from where é avaliada totalmente antes de quaisquer dos seus resultados serem inseridos na relação (caso contrário, consultas como insert into tabela1 select * from tabela1 causariam problemas

54 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Modificação do banco de dados – atualizações n Aumente todas as contas com saldos acima de US$ em 6 por cento, enquanto todas as outras recebem 5 por cento. l Escreva duas instruções update: update conta set saldo = saldo * 1,06 where saldo >= update conta set saldo = saldo * 1,05 where saldo <= l A ordem é importante Pode ser feito melhor usando a instrução case (próximo slide)

55 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Instrução case para atualizações condicionais n Mesma consulta de antes: Aumente todas as contas com saldos acima de US$10000 em 6 por cento, enquanto todas as outras recebem 5 por cento. update conta set saldo = case when saldo <= then saldo * 1,05 else saldo * 1,06 end

56 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Atualização de uma view n Crie uma view de todos os dados de empréstimo na relação empréstimo, ocultando o atributo quantia – create view agência_empréstimo as select nome_agência, número_empréstimo from empréstimo n Insira uma nova tupla em agência_empréstimo insert into agência_empréstimo values (‘Perryridge’, ‘L-307’) Essa inserção precisa ser representada pela inserção da tupla (‘L-307’, ‘Perryridge’, nulo ) na relação empréstimo

57 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Atualizações através de Views (cont.) n Algumas atualizações através de views são impossíveis de se traduzirem em atualizações nas relações de banco de dados l create view v as select nome_agência from conta – insert into v values (‘L-99’, ‘ Downtown’, ‘23’) n Outras não podem ser traduzidas unicamente l insert into todos_clientes values (‘ Perryridge’, ‘John’)  Precisa escolher empréstimo ou conta, e criar um novo número de empréstimo/conta! n A maioria das implementações SQL permite atualizações apenas em views simples (sem agregados) definidas em uma única relação.

58 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Relações juntadas** n As operações de junção tomam duas relações e retornam como resultado outra relação. n Essas operações adicionais normalmente são usadas como expressões de subconsulta na cláusula from. n Condição de junção – define que tuplas nas duas relações correspondem e que atributos estão presentes no resultado da junção. Tipo de junção – define como são tratadas as tuplas em cada relação que não corresponde a qualquer tupla na outra relação (com base na condição de junção).

59 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Relações juntadas – datasets para exemplos n Relação empréstimo n Relação tomador Nota: Informações de tomador faltando para L-260 e informações de empréstimo faltando para L-155

60 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Relações juntadas – Exemplos empréstimo inner join tomador on empréstimo.número_empréstimo = tomador.número_empréstimo empréstimo left outer join tomador on empréstimo.número_empréstimo = tomador.número_empréstimo

61 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Relações juntadas – Exemplos empréstimo natural inner join tomador empréstimo natural right outer join tomador

62 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Relações juntadas – Exemplos empréstimo full outer join tomador using (número_empréstimo) Encontre todos os clientes que possuem uma conta ou um empréstimo (mas não ambos) no banco. select nome_cliente from (depositante natural full outer join tomador) where número_conta is null or número_empréstimo is null

63 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Fim do Capítulo 3

64 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Figura 3.1: Esquema do banco de dados

65 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Figura 3.3: Tuplas inseridas em empréstimo e tomador

66 Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Figura 3.4: As relações empréstimo e tomador


Carregar ppt "Sistema de Banco de Dados, 5/E Korth Silberschatz Sundarshan Capítulo 3: SQL."

Apresentações semelhantes


Anúncios Google