Banco de Dados I 2007 - Computação Unioesteclodis/BDI/BDI_2007_Modulo3_1.pdf · Uma seqüência...

31
Módulo III: Linguagens de Consulta (Aula 1) Clodis Boscarioli Banco de Dados I 2007

Transcript of Banco de Dados I 2007 - Computação Unioesteclodis/BDI/BDI_2007_Modulo3_1.pdf · Uma seqüência...

Módulo III: Linguagens de Consulta

(Aula 1)

Clodis Boscarioli

Banco de Dados I

2007

Conteúdo do Módulo:

� Linguagens de Consulta Formais

� Álgebra Relacional;

� Cálculo Relacional de Tupla;

� Cálculo Relacional de Domínio;

� Linguagens de Consulta Comerciais

� SQL (Structured Query Language);

� QBE (Query by Example).

� Álgebra Relacional;

�Operadores Fundamentais;

�Operadores Adicionais;

Agenda:

Introdução

� Linguagem de consulta procedural (o usuário descreve os passos que devem ser executados para obter uma informação).

� As linguagens de consulta formais ilustram as técnicas fundamentais para extração de dados em um BD.

� Conjunto de operações que tomam como entrada uma ou duas relações produzindo como resultado uma nova relação.

� Uma seqüência de operações da álgebra relacional forma uma expressão em álgebra relacional cujo resultado também será uma relação. Esta relação representa o resultado de uma consulta ao BD.

� É utilizada como base para implementar e otimizar consultas em SGBD relacionais.

130016Perryridge

90011Round Hill

50093Mianus

150014Downtown

150015Perryridge

200023Redwood

100017Downtown

totalnúmero_empréstimonome-agência

Exemplo: Relação empréstimo

Esquema Agente_empréstimo: nome_cliente, nome_bancário e número_empréstimo.

Esquema Cliente: nome-cliente, rua, cidade

Esquema Conta: número_conta, nome_cliente, saldo

Operações Fundamentais� Select

� Operação unária

� Seleciona tuplas que satisfaçam um predicado

� Denotada pela letra grega σσσσ (sigma minúsculo)

� Exemplo:� Selecione (ou encontre) todas as tuplas da relação empréstimo,

cuja agência é “Perryridge”

σσσσ nome_agência = “Perryridge”(empréstimo)

130016Perryridge

150015Perryridge

totalnúmero_empréstimonome_agência

Operações Fundamentais

� Exemplos:

� Encontre todas as tuplas cujos totais são superiores a 1.200 reais.

σσσσ total > 1200 (empréstimo)

� Encontre as tuplas que contenham empréstimos acima de 1.200 reais, feitos na agência Perryridge.

σσσσ total > 1200 ∧ nome_agência = “Perryridge” (empréstimo)

� Todos os clientes que tenham o mesmo nome de seu agente bancário.

σσσσ nome_cliente = nome_agente(agente_cliente)

Operações Fundamentais� Considere o esquema Empregado:

SSN, Pnome, Minicial, Unome, DataNasc, Endereço, Sexo, Salario, SuperSSN, DNO

� Selecione as tuplas de EMPREGADO cujo departamento é 4, ou aquelas com salário superior a 30.000:

� σσσσ DNO=4 (EMPREGADO)

� σσσσ salario > 30000 (EMPREGADO)

� σσσσ DNO=4 ∨ salario > 30000 (EMPREGADO)

� Selecione as tuplas de todos os empregados que trabalham no departamento 4 e recebem acima de 25.000, ou trabalham no departamento 5 e recebem acima de 30.000.

� σσσσ (DNO=4 AND salario > 25000) OR (DNO=5 AND salario > 30000) (EMPREGADO)

� σσσσ (DNO=4 ∧ salario > 25000) ∨ (DNO=5 ∧ salario > 30000) (EMPREGADO)

Operações Fundamentais

� Observe que a operação de SELEÇÃO é comutativa:� σσσσ <cond1> (σσσσ <cond2> (R)) = σσσσ <cond2> (σσσσ <cond1> (R))

� Sempre é possível combinar uma propagação de operações de SELEÇÃO dentro de uma única operação de SELEÇÃO, com uma condição conjuntiva (AND), isto é:� σσσσ <cond1> (σσσσ <cond2> ( ... (σσσσ <condN> (R)) ...)) = σσσσ <cond1> AND <cond2> AND ... AND

<condN> (R)

� Uma seqüência de SELEÇÃO pode ser aplicada em qualquer ordem.

Operações Fundamentais

� Project

� Operação unária. Denotada pela legra grega ππππ (pi minúsculo).

� Retorna parte da relação deixando de fora os atributos que não foram solicitados. As linhas em duplicidade são eliminadas.

� Os atributos que desejamos no resultado, listamos de forma subscrita em ππππ.

�Exemplo:�Listar todos os números de empréstimos e totais desses empréstimos

ππππ número_empréstimo, total (empréstimo)

130016

90011

50093

150014

150015

200023

100017

totalnúmero-empréstimo

Operações Fundamentais

Operações Fundamentais

� Outro exemplo:� Lista o primeiro e o último nome e o salário de cada

empregado:� ππππ Unome, Pnome, Salário (EMPREGADO)

� O resultado da operação de PROJEÇÃO tem apenas os atributos especificados na <lista de atributos>, na mesma ordem em que eles aparecem na lista.

� O número de tuplas em uma relação resultante de uma operação de PROJEÇÃO é sempre menor ou igual ao número de tuplas em R. Se a lista escolhida for uma superchave de R, isto é, incluir alguma das chaves de R, a relação resultante terá o mesmo número de tuplas queR.

Operações Fundamentais

� ππππ <lista1> (ππππ <lista2> (R)) = ππππ <lista1> (R)

�Se a <lista 2> contiver os atributos da<lista1>; do contrário, a expressão do lado esquedro será incorreta.

�Também note que a comutatividade não se aplica na PROJEÇÃO.

Operações Fundamentais

� Encontre os clientes que moram em Harrison.

π nome_cliente (σσσσ cidade = “Harrison”(cliente))

� Encontre os saldos dos empréstimos feitos na agência “Perryridge”.

ππππ saldo (σσσσ nome_agência = “Perryridge”(empréstimo))

Operação Adicional

� Designação (RENAME – Navathe)

� Denotada pelo símbolo �.

� A aplicação de uma designação não resulta em uma relação mas associa o resultado de uma expressão ao uma variável do tipo relação.

Temp1 � π R-S (r)

Temp2 � Temp1 |x| π R-V (s)

Operação Adicional

� Deps_Emps � σσσσ DNO=4 (EMPREGADO)

� Resultados � ππππ Pnome, Unome, Salario (Deps_Emps)

� TEMP � σσσσ DNO=4 (EMPREGADO)

� R(Primeironome, Ultimonome, Salario) � ππππ Pnome,

Unome, Salario (TEMP)

� Pode-se renomear atributos, veremos mais àfrente.

Operações Fundamentais

� Union

�Operação binária�Realiza a união de duas relações�Requisitos: as relações envolvidas na

operação devem ser compatíveis.� As relações envolvidas devem possuir o mesmo

número de atributos� Os domínios do i-ésimo atributo de uma relação e

o i-ésimo atributo da outra relação devem ser os mesmos para todo i.

�Denotada pelo símbolo ∪∪∪∪.

Operações Fundamentais

� Encontre o nome de todos os clientes do banco que tenham uma conta ou um empréstimo ou ambos.

� Para encontrar todos os clientes com um empréstimo no banco:

ππππ nome_cliente (devedor)

� Para encontrar todos os clientes com uma conta no banco:

ππππ nome_cliente (depositante)

� Unindo as duas consultas acima em uma:ππππ nome_cliente (devedor) ∪ ππππ nome_cliente (depositante)

Operações Fundamentais

� Originalmente existiam sete devedores e seis depositantes.� Note que o resultado dessa consulta é uma relação com dez tuplas. � Esta diferença se deve ao fato de alguns clientes serem devedores e

depositantes.� Os valores repetidos são eliminados.

Adams

Williams

Curry

Jackson

Lindsay

Jones

Turner

Hayes

Smith

Johnson

nome-cliente

Operações Fundamentais

� Diferença entre conjuntos

� Operação binária. Denotada pelo símbolo -.

� Permite encontrar as tuplas que estão em uma relação mas não estão em outra.

� A expressão r – s resulta na relação que contém as tuplas que estão em r mas não estão em s.

� Exemplo:� Encontre todos os clientes do banco que possuem conta mas não

possuem empréstimos.

ππππ nome_cliente (depositante) - ππππ nome_cliente (devedor)

Lindsay

Turner

Johnson

nome-cliente

Operações Fundamentais

� Produto Cartesiano

� Operação binária. Denotada pelo símbolo x (r x s).� Permite combinar informações de duas relações

quaisquer.� Renomear para diferenciar: desde que um mesmo nome de atributo

pode aparecer tanto em r quanto em s, é preciso estabelecer um modo de diferenciá-los na relação resultante. Para isso pode-se anexar o nome da relação ao atributo que a ela pertence. Exemplo: devedor x empréstimo

(devedor.nome_cliente, devedor.número_empréstimo, empréstimo.nome_agência, empréstimo.nome_cliente,

empréstimo.total)ou

(nome_cliente, devedor.número_empréstimo, nome_agência, empréstimo.número_empréstimo, total)

Operações Fundamentais

� O Produto Cartesiano apresenta problemas quando as relações tem mesmo nome, quando se quer fazer o produto de uma relação com ela mesma ou quando o produto cartesiano está envolvido com a relação resultante de expressões. A operação rename resolve estes problemas.

� O produto cartesiano permite combinar duas relações construindo uma tupla da relação resultante por meio de cada par de tuplas possível: uma da relação r e outra da relação s.

� Exemplo: encontre os nomes de todos os clientes que tenham um empréstimo na agência Perryridge.

σσσσ nome_agência = “Perryridge” (devedor X empréstimo)σσσσ devedor.número_empréstimo = empréstimo.número_empréstimo (σσσσ nome_agência = “Perryridge”

(devedor X empréstimo))ππππ nome_cliente (σσσσ devedor.número_empréstimo = empréstimo.número_empréstimo (σσσσ nome_agência =

“Perryridge” (devedor X empréstimo)))

Operações Fundamentais

� Rename (atributos)

� Operação unária� O resultado de uma expressão em álgebra relacional

não possui um nome que possa ser usado para referenciá-lo.

� O operador rename permite dar nomes a eles.� É representado pela letra grega ρρρρ (rô minúsculo)

ρ X(E)Onde x é o nome do resultado da expressão E.

Exemplo: Encontre o saldo mais alto em uma conta do banco.

Operações Fundamentais

� Estratégia:

� Encontrar os saldos menores do que outros saldos:

π conta.saldo (σ conta.saldo < outros.saldo (conta x ρoutros(conta)))

� Subtrair este resultado da relação onde se encontram todos os saldos.

π saldo (conta) - π conta.saldo (σ conta.saldo < outros.saldo (conta x ρ

outros (conta)))

Operações Fundamentais

� Encontre os nomes de todos os clientes que moram na mesma rua e na mesma cidade que Smith.

� Estratégia:

� Obter a rua e a cidade de Smith

ππππ rua_cliente, cidade_cliente (σσσσ nome_cliente = “Smith” (cliente))

� Comparar as ruas dos demais clientes com a rua de Smith para terminar a consulta.

ππππ cliente.nome-cliente (σσσσ cliente.rua_cliente = Smith.rua ∧ cliente.cidade_cliente = Smith.cidade

(cliente X ρρρρ Smith(rua,cidade) (ππππ rua_cliente, cidade_cliente (σσσσ nome_cliente = “Smith”

(cliente)))))

Operações Adicionais

� Interseção

� Operação binária

� Permite encontrar as dados que pertencem à duas relações.

� Denotada pelo símbolo ∩∩∩∩

� Exemplo: encontre todos os clientes que possuam contas e também possuam empréstimos.

π nome_cliente (devedor) ∩∩∩∩ π nome_cliente (depositante)

Propriedades da União/Interseção/Diferença

� Tanto a União quanto a Interseção são operações comutativas:� R ∪ S = S ∪ R� R ∩ S = S ∩ R

� Tanto União quanto Interseção podem ser tratadas como operaçõesn-árias aplicáveis a qualquer número de relações, porque ambas são operações associativas, isto é:� R ∪ ( S ∪ T ) = (R ∪ S) ∪ T� (R ∩ S) ∩ T = R ∩ ( S ∩ T)

� A operação de Diferença não é comutativa:� R – S <> S - R

Operações Adicionais

� Junção Natural

� Operação binária

� Simplifica as expressões que envolvem um produto cartesiano seguido de uma seleção quanto à igualdade dos atributos comuns.

� Denotada pelo símbolo |x|.

� Encontre os nomes dos clientes que possuam um empréstimo no banco e o total de cada empréstimo.

π nome_cliente, empréstimo.número_empréstimo, total (σσσσ devedor.número_empréstimo =

empréstimo.número_empréstimo (devedor x empréstimo))

π nome_cliente, número_empréstimo, total (devedor |x| empréstimo)

Operações Adicionais

� Exemplos:� Encontre os nomes de todas as agências com

clientes que tenham contas no banco e morem em Harrison.

π nome_agência ( σ cliente_cidade = “Harrison” (cliente |x| conta |x| depositante))

� Encontre todos os clientes que tenham empréstimo e conta no banco.

π nome_cliente (devedor |x| depositante)

Obs: se as duas relações envolvidas em uma junção natural não têm atributos em comum, então a junção natural produz um resultado igual ao produzido pelo produto cartesiano.

Operações Adicionais

� A forma geral da operação de junção de duas relações R(A1, A2, ..., An) e S(B1, B2, ..., Bn) é:

R |X| <condição de junção> S

� Uma operação de junção com tal condição geral é chamada THETA JOIN.

� Tuplas cujos atributos de junção são nulos não aparecem no resultado.

� EQUIJOIN: junção onde somente operadores de comparação “=“ são utilizados.

� NATURAL JOIN: requer que os dois atributos de junção tenha o mesmo nome em ambas relações.

Referências Bibliográficas

� Sistemas de Banco de Dados. (Cap. 3) AbrahamSilberchatz, Henry F. Korth e S. Sudarshan. 3ª Edição.Makron Books, 1999.

� Sistemas de Banco de Dados. (Cap. 6) Ramez Elsmari e Shamkant B. Navathe. 4ª Edição. Editora Pearson Addison Wesley, 2005.