Banco de Dados - Álgebra Relacional(1).pdf

34
Banco de Dados Banco de Dados Álgebra Relacional Álgebra Relacional Daniel Teixeira

Transcript of Banco de Dados - Álgebra Relacional(1).pdf

Page 1: Banco de Dados - Álgebra Relacional(1).pdf

Banco de DadosBanco de Dados

Álgebra RelacionalÁlgebra Relacional

Daniel Teixeira

Page 2: Banco de Dados - Álgebra Relacional(1).pdf

Álgebra Relacional

• É uma linguagem de consulta teórica–Usuários não a usam diretamente. – É muito complicada para ser usada

diretamente• Outras linguagens de consulta são traduzidas

em álgebra relacional

Page 3: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

• Operações derivadas da teoria dos conjuntos– União

– Interseção– Diferença

– Produto Cartesiano

• Operações relacionais especiais– Seleção

– Projeção

– Junção (natural)

Page 4: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

• União–R U S: Obtém a união das tuplas em R e S• Ilegal se R e S têm números diferentes de atributos

Page 5: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

• Diferença–R - S: obtém as tuplas em R que não estão

em S• Ilegal se R e S têm números diferentes de atributos

Page 6: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

• Interseção–R ∩ S: Obtém a interseção das tuplas de R

e S• Ilegal se R e S têm números diferentes de atributos

Page 7: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

• Seleção:– Seleciona todas as tuplas que satisfazem à

condição de seleção de uma relação R

Page 8: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

• Projeção:– Produz uma nova relação com apenas

alguns atributos de R, removendo tuplas duplicadas

Page 9: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

• Produto Cartesiano:–A relação resultante consiste de todas as

possíveis tuplas resultantes da combinação de duas tuplas, uma de cada relação envolvida na operação

Page 10: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

• Junção:–A junção de R com S • (R x S) [ expressão de seleção]

Page 11: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

• Junção Natural:–Quando a condição de junção for a

igualdade do valor de um atributo comum e o atributo comum aparecer só uma vez no resultado

Page 12: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

Page 13: Banco de Dados - Álgebra Relacional(1).pdf

Operações da Álgebra Relacional

EMPREGADOS ( E )enome CPFCPF salário CPF_Supersisor dnúmero

Chico 1234 5000 9012 01

Maria 5678 6500 9012 02

José 9012 4000 NULL 03

DEPARTAMENTO ( D )dnome dnúmerodnúmero CPF_gerente

Química 01 1234

Física 02 5678

Biologia 03 9012

PROJETOS ( P )pnome pnúmeropnúmero dnúmero

CLife 01 03

H2O 02 03

BBad 03 01

TRABALHA ( T )CPF_Emp pnúmero

1234 03

9012 01

Page 14: Banco de Dados - Álgebra Relacional(1).pdf

Consultas Básicas em SQL

• select < lista de atributos>

from < lista de nomes de relação>

where < condição de seleção> ;

• select nome, idade, sexo, ….

from Empregados, Passagens, Livros, ...

where <condição>;

Page 15: Banco de Dados - Álgebra Relacional(1).pdf

Consultas Básicas em SQL

• (R1 x ... x Rm) [ <condição> ] [A1,...,An]

Produto cartesiano Seleção Projeção

Page 16: Banco de Dados - Álgebra Relacional(1).pdf

Consultas Básicas em SQL

• Esquema Exemplo– E –D

• Liste todas informações em E sobre empregados com salário R$ 1000.

select *

from E

where E.salário = 1000;

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 17: Banco de Dados - Álgebra Relacional(1).pdf

Consultas Básicas em SQL

• Esquema Exemplo– E –D

• Liste todas as informações em D

select *

from D;

• A cláusula ‘where’ é opcional.

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 18: Banco de Dados - Álgebra Relacional(1).pdf

Implementando Junção

• Esquema Exemplo– E –D

• Liste todos os empregados e o nome dos seus departamentos

select enome, dnome

from E, D

where E.dnúmero = D.dnúmero;

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 19: Banco de Dados - Álgebra Relacional(1).pdf

Implementando Junção

• Esquema Exemplo– E –D

• Nome dos empregados do departamento de Química e que tem um salário < R$1000?

select enome

from E, D

where E.dnúmero = D.dnúmero AND

D.dnome = ‘Química’ AND

salário < 1000;

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 20: Banco de Dados - Álgebra Relacional(1).pdf

Implementando Junção

• Esquema Exemplo– E –D

• Nome dos empregados que ganham mais que seu gerente?

select E1.enome

from E E1, E E2, D

where E1.dnúmero = D.dnúmero AND

D.CPF_gerente = E2.CPF AND

E2.salário < E1.salário;

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 21: Banco de Dados - Álgebra Relacional(1).pdf

Implementando Junção

• Esquema Exemplo– E –D

• Nome dos gerentes que ganham menos que os seus empregados?

SQL não elimina tuplas duplicadas! Você deve requisitar explicitamente dizendo ‘select distinct’.

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 22: Banco de Dados - Álgebra Relacional(1).pdf

Implementando Junção

• Esquema Exemplo– E –D –Outer Join

• Encontre o nome do departamento de cada empregado. Devem constar inclusive os empregados sem departamento.

select E.enome, D.dnome

from E, D

where E1.dnúmero *= D.dnúmero;

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 23: Banco de Dados - Álgebra Relacional(1).pdf

Implementando JunçãoEMPREGADOS ( E )

enome CPFCPF salário CPF_Supersisor dnúmero

Chico 1234 5000 9012 01

Maria 5678 6500 9012 02

José 9012 4000 NULL 03

Renato 50500 7000 NULL NULL

DEPARTAMENTO ( D )

dnome dnúmerodnúmero CPF_gerente

Química 01 1234

Física 02 5678

Biologia 03 9012

RESULTADO

enome dnome

Chico Química

Maria Física

José Biologia

Renato NULL

Page 24: Banco de Dados - Álgebra Relacional(1).pdf

Subconsultas

• Testa membros de um conjunto:– IN–NOT IN

• Verificação de Relações Vazias:– EXISTS–NOT EXISTS

• Comparação de Conjuntos: Subconsultas introduzidas com um operador de comparação ( =,<>, >, >=, <, <= ) seguida por ANY ou ALL

Page 25: Banco de Dados - Álgebra Relacional(1).pdf

Subconsultas

• Esquema Exemplo– E –D

• Quem está no mesmo departamento de Vera?

select E2.enome

from E E1, E E2

where E1.dnúmero = E2.dnúmero AND

E1.enome = 'Vera';

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 26: Banco de Dados - Álgebra Relacional(1).pdf

Subconsultas

• Esquema Exemplo– E –D

• Quem está no mesmo departamento de Vera?

select enome

from E

where E.dnúmero IN

(select dnúmero

from E

where enome = “Vera”);

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 27: Banco de Dados - Álgebra Relacional(1).pdf

Subconsultas

• Esquema Exemplo– E –D

• Nomes dos empregados que não têm departamento?

select enome

from E

where NOT EXISTS

(select *

from D

where E.dnúmero = dnúmero);

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 28: Banco de Dados - Álgebra Relacional(1).pdf

Subconsultas

• Esquema Exemplo– E –D

• > all --- Maior do que todos• Quem tem o maior salário?

select enome

from E

where salário >= all (select salário

from E );

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 29: Banco de Dados - Álgebra Relacional(1).pdf

Subconsultas

• Esquema Exemplo– E –D

• > any --- Maior do que ao menos um

• Quem ganha mais do que alguém no departamento de Física?

select enome

from E

where salário >= any (select salário

from E, D

where D.dnome = 'Física' AND

E.dnúmero = D.dnúmero);

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 30: Banco de Dados - Álgebra Relacional(1).pdf

Ordenando Resultados

• Esquema Exemplo– E –D

• DESC --- ordem decrescente

• Imprima E. Ordene as tuplas pelo número do depto. Para cada depto, ordene do mais alto para o mais baixo salário. Se existir empate de salario, use ordem alfabética no nome.

select *

from Eorder by dnúmero, salário DESC, enome;

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 31: Banco de Dados - Álgebra Relacional(1).pdf

Ordenando ResultadosEMPREGADOS ( E )

enome CPFCPF salário CPF_Supersisor dnúmero

Chico 1234 5000 9012 01

Maria 5678 6500 9012 01

José 9012 4000 NULL 02

Renato 50500 7000 NULL 02

Adriano 12121 4000 9012 02

RESULTADO

enome CPFCPF salário CPF_Supersisor dnúmero

Maria 5678 6500 9012 01

Chico 1234 5000 9012 01

Renato 50500 7000 NULL 02

Adriano 12121 4000 9012 02

José 9012 4000 NULL 02

Page 32: Banco de Dados - Álgebra Relacional(1).pdf

Funções de Agregação

• Esquema Exemplo– E –D

• Na cláusula select , pode-se usar:– avg(A), sum(A), min(A), max(A), count(A)

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 33: Banco de Dados - Álgebra Relacional(1).pdf

Funções de Agregação

• Esquema Exemplo– E –D

• Qual é a média de salário dos empregados no departamento de Biologia?

select avg(salário)

from E, D

where E.dnúmero = D.dnúmero AND

D.dnome = “Biologia”;

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente

Page 34: Banco de Dados - Álgebra Relacional(1).pdf

Funções de Agregação

• Esquema Exemplo– E –D

• Quantos empregados trabalham em mais de um departamento?

select count (distinct enome)

from E E1

where enome in (select E2.enome

from E E2

where E2.enome = E1.enome AND

E2.dno != E1.dno);

enome CPFCPF salário CPF_Supersisor dnúmero

dnome dnúmerodnúmero CPF_gerente