Post on 05-Feb-2016
Banco de DadosBanco de Dados
Álgebra RelacionalÁlgebra Relacional
Daniel Teixeira
Á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
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)
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
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
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
Operações da Álgebra Relacional
• Seleção:– Seleciona todas as tuplas que satisfazem à
condição de seleção de uma relação R
Operações da Álgebra Relacional
• Projeção:– Produz uma nova relação com apenas
alguns atributos de R, removendo tuplas duplicadas
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
Operações da Álgebra Relacional
• Junção:–A junção de R com S • (R x S) [ expressão de seleção]
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
Operações da Álgebra Relacional
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
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>;
Consultas Básicas em SQL
• (R1 x ... x Rm) [ <condição> ] [A1,...,An]
Produto cartesiano Seleção Projeção
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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