Buscar

10_Alg_relac_novo

Prévia do material em texto

Algebra Relacional
Prof Alan
Operações da Álgebra Relacional (equivalente em 
SQL)
Projeção (π)
• Parâmetros: uma Relação e uma lista de 
atributos da Relação 
• Resultado: uma nova Relação, com a mesma 
quantidade de elementos da relação original, 
mas somente os atributos presentes na lista de 
atributos.
Sintaxe: π (Lista de Atributos) (Relação)
Exemplo 1:
Pessoa (codigo, nome, cidade_reside, nascimento)
codigo nome cidade_reside nascimento
1 JOSE DA SILVA 134 1973-05-10
2 JOAO OLIVEIRA 856 1970-05-21
3 MARIA DA SILVA 134 1977-05-18
4 MARIA OLIVEIRA 912 1983-04-10
5 JOSE OLIVERIA DA SILVA 588 1978-04-20
6 JOAO OLIVEIRA DA SILVA 134 1985-05-17
7 JOSE MARIA DA SILVA 245 1973-01-14
8 MARIA JOSE DA SILVA 245 1973-07-15
9 JOSEFA DA SILVA 103 1974-05-12
10 JOSEFA OLIVEIRA 103 1979-09-16
11 JOAO JOSE DA SILVA 356 1982-06-11
Operação de projeção:
π (nome, nascimento) (Pessoa)
Equivalente em SQL:
select nome, nascimento from pessoa;
nome nascimento
JOSE DA SILVA 1973-05-10
JOAO OLIVEIRA 1970-05-21
MARIA DA SILVA 1977-05-18
MARIA OLIVEIRA 1983-04-10
JOSE OLIVERIA DA SILVA 1978-04-20
JOAO OLIVEIRA DA SILVA 1985-05-17
JOSE MARIA DA SILVA 1973-01-14
MARIA JOSE DA SILVA 1973-07-15
JOSEFA DA SILVA 1974-05-12
JOSEFA OLIVEIRA 1979-09-16
JOAO JOSE DA SILVA 1982-06-11
Seleção (σ)
Parâmetros: uma Relação e um Predicado
Predicado = condição sobre os elementos da 
Relação.
Podem ser utilizados :
=, <, >, <=, >=, <>
∧ (E) ∨(OU) ou ! (NÃO)
Resultado: uma nova Relação, com os mesmos 
atributos da relação original, mas somente os 
elementos que satisfaçam as condições do Predicado.
σ (Predicado) (Relação)
Exemplo 2:
σ (cidade_reside = 134) (Pessoa)
Equivalente em SQL:
select * from pessoa where cidade_reside = 134;
Codigo Nome cidade_reside nascimento
1 JOSE DA SILVA 134 1973-05-10
3 MARIA DA SILVA 134 1977-05-18
6 JOAO OLIVEIRA DA SILVA 134 1985-05-17
Exemplo 3:
σ (cidade_reside = 134 ∧ nascimento > '1975-01-01') (Pessoa)
Equivalente em SQL:
select * from pessoa
where cidade_reside = 134 
and nascimento > '1975-01-01' ;
codigo Nome cidade_reside nascimento
3 MARIA DA SILVA 134 1977-05-18
6 JOAO OLIVEIRA DA SILVA 134 1985-05-17
Exemplo 4 (Seleção + Projeção):
π(Nome,nascimento)(σ (cidade_reside = 134 ∧ nascimento > '1975-01-
01') (Pessoa))
Equivalente em SQL:
select Nome, nascimento from pessoa
where cidade_reside = 134 
and nascimento > '1975-01-01' ;
Nome nascimento
MARIA DA SILVA 1977-05-18
JOAO OLIVEIRA DA SILVA 1985-05-17
Exercício 1 - Ref: 2014 CESGRANRIO Petrobras Prova: 
Técnico(a) de Informática Júnior
Considere o esquema relacional abaixo, no qual placa é a 
chave primária.
VEICULO (Placa, Cor, Modelo, Marca, Ano, Valor)
Qual é a expressão em álgebra relacional a ser aplicada sobre 
esse esquema, de forma a obter as Placas dos VEICULOS com 
Ano igual a 2011 e Valor menor que 9000?
A) σPlaca (σAno = 2011; Valor < 9000 )
B) σPlaca (πValor < 9000 AND Ano = 2011 )
C) σPlaca (πValor < 9000 AND Ano = 2011 (VEICULO))
D) πPlaca (σAno = 2011 AND Valor < 9000 (VEICULO))
E) πPlaca (πAno = 2011; πValor < 9000 (VEICULO))
Exercício 2 - Ref: 2014 CESGRANRIO Banco da Amazônia Prova: Técnico Científico -
Banco de Dados
Para responder à questão, tenha como referência o diagrama apresentado abaixo, 
que representa parte do modelo de dados de uma instituição financeira.
Que expressão em Álgebra 
Relacional cria, a partir da 
Tabela Conta, uma listagem 
com duas colunas, id_conta
e debito_bloqueado_sn, 
contendo apenas as contas 
com credito_bloqueado_sn
igual a "S"?
A
B
C
D
E
Junção (l><l)
Baseada no produto cartesiano de duas relações 
(combinação de cada elemento de uma das Relações com 
todos os elementos da outra Relação)
Exemplo de Produto Cartesiano
Curso (COD, NOME)
Aluno (RA, NOME, COD_CURSO)
COD NOME
1 CC
2 SI
RA NOME COD_CURSO
111 Juca 1
222 Ronaldo 1
333 Ana 2
Demanda: Mostrar o Nome do Aluno e o Nome do Curso
select Aluno.nome, Curso.nome from Aluno, Curso;
2 linhas Curso x 3 linhas Aluno = Produto Cartesiano 6 linhas
• A Junção aplica ao produto cartesiano uma condição que 
corresponde a condição de igualdade entre valores de atributos 
das duas relações 
– Igualdade de chaves : PK da tabela 1 = FK da tabela N
R1 l><l (condição de junção) R2
Aluno.nome Curso.nome
Juca CC
Juca SI
Ronaldo CC
Ronaldo SI
Ana CC
Ana SI
Sejam as relações Pessoa e Cidade:
Pessoa (codigo, nome, cidade_reside, nascimento)
Cidade (codigo, uf, nome)
codigo nome cidade_reside nascimento
1 JOSE DA SILVA 134 1973-05-10
2 JOAO OLIVEIRA 856 1970-05-21
3 MARIA DA SILVA 134 1977-05-18
4 MARIA OLIVEIRA 912 1983-04-10
5 JOSE OLIVERIA DA SILVA 588 1978-04-20
6 JOAO OLIVEIRA DA SILVA 134 1985-05-17
7 JOSE MARIA DA SILVA 245 1973-01-14
8 MARIA JOSE DA SILVA 245 1973-07-15
9 JOSEFA DA SILVA 103 1974-05-12
10 JOSEFA OLIVEIRA 103 1979-09-16
11 JOAO JOSE DA SILVA 356 1982-06-11
codigo uf Nome
103 PR CURITIBA
134 SP SAO PAULO
245 RJ RIO DE JANEIRO
356 AL MACEIO
412 PE RECIFE
423 MG BELO HORIZONTE
458 BA SALVADOR
471 MG OURO PRETO
479 PR LONDRINA
588 SP CAMPINAS
856 SP SOROCABA
912 RJ NITEROI
Exemplo 5:
Fazer a junção de cada pessoa com a cidade onde reside:
Pessoa l><l (PESSOA.CIDADE_RESIDE = CIDADE.CODIGO) Cidade
Equivalente em SQL:
Select * from pessoa, cidade 
where pessoa.cidade_reside = cidade.codigo;
Código nome cidade_reside nascimento codigo uf nome
1 JOSE DA SILVA 134 1973-05-10 134 SP SAO PAULO
2 JOAO OLIVEIRA 856 1970-05-21 856 SP SOROCABA
3 MARIA DA SILVA 134 1977-05-18 134 SP SAO PAULO
4 MARIA OLIVEIRA 912 1983-04-10 912 RJ NITEROI
5 JOSE OLIVERIA DA SILVA 588 1978-04-20 588 SP CAMPINAS
6 JOAO OLIVEIRA DA SILVA 134 1985-05-17 134 SP SAO PAULO
7 JOSE MARIA DA SILVA 245 1973-01-14 245 RJ RIO DE JANEIRO
8 MARIA JOSE DA SILVA 245 1973-07-15 245 RJ RIO DE JANEIRO
9 JOSEFA DA SILVA 103 1974-05-12 103 PR CURITIBA
10 JOSEFA OLIVEIRA 103 1979-09-16 103 PR CURITIBA
11 JOAO JOSE DA SILVA 356 1982-06-11 356 AL MACEIO
Exemplo 6:
Obter o nome da cada pessoa e a uf e o nome da cidade 
onde reside (Projeção + Junção)
π (pessoa.nome, cidade.uf, cidade.nome) (Pessoa l><l (PESSOA.CIDADE_RESIDE = 
CIDADE.CODIGO) Cidade)
Nome Uf Nome
JOSE DA SILVA SP SAO PAULO
JOAO OLIVEIRA SP SOROCABA
MARIA DA SILVA SP SAO PAULO
MARIA OLIVEIRA RJ NITEROI
JOSE OLIVERIA DA SILVA SP CAMPINAS
JOAO OLIVEIRA DA SILVA SP SAO PAULO
JOSE MARIA DA SILVA RJ RIO DE JANEIRO
MARIA JOSE DA SILVA RJ RIO DE JANEIRO
JOSEFA DA SILVA PR CURITIBA
JOSEFA OLIVEIRA PR CURITIBA
JOAO JOSE DA SILVA AL MACEIO
Em SQL:
Select
pessoa.nome, 
cidade.uf, 
cidade.nome
from pessoa, cidade
where
pessoa.cidade_reside=
cidade.codigo;
Exemplo 7:
Curso (COD, NOME)
Aluno (RA, NOME, COD_CURSO)
Obter o nome da cada pessoa e o nome do curso 
(Projeção + Junção)
π (Aluno.nome, Curso.nome) (Aluno l><l (CURSO.COD = 
ALUNO.COD_CURSO) Curso)
Select Aluno.nome, Curso.nome from Aluno, Curso
Where Aluno.Cod_curso = Curso.Cod; 
COD NOME
1 CC
2 SI
RA NOME COD_CURSO
111 Juca 1
222 Ronaldo 1
333 Ana 2
Exemplo 8:
Curso (COD, NOME) Aluno (RA, NOME, COD_CURSO)
Obter o nome da cada pessoa e o nome do curso (somente 
para os alunos de CC) (Projeção + Seleção + Junção)
π (Aluno.nome, Curso.nome) ( ( Curso.nome= “CC”) (
Aluno l><l (CURSO.COD = ALUNO.COD_CURSO) Curso))
Select Aluno.nome, Curso.nome from Aluno, Curso
Where Curso.nome = “CC” AND Curso.Cod =Aluno.Cod_curso; 
COD NOME
1 CC
2 SI
RA NOME COD_CURSO
111 Juca 1
222 Ronaldo 1
333 Ana 2
Exercícios (Obter a expressão em Álgebra Relacional)
• Construa uma query para exibir o sobrenome e o 
salário dos funcionários que ganham entre 5000 e 
12000 e estão no departamento 20. 
• Crie uma consulta que exibe o sobrenome e o id do 
departamento de todos os funcionários dos 
departamentos 20 ou 50 e que ganhem mais que 
2500.
• Crie uma consulta para exibir o sobrenome, o id do 
depto e o nome do depto de todos os funcionários.• O departamento de RH precisa de um relatório que 
exiba o sobrenome, o nome do departamento e a 
cidade de todos os funcionários que trabalham na 
cidade de Toronto.
• π(sobre_nome, salario)(σ ((salario >= 5000 ∧ salario <= 12000) ∧
departamento_id = 20) (Funcionarios))
• π(sobre_nome, departamento_id)(σ ((departamento_id = 20 v 
departamento_id = 50) ∧ salario > 2500) (Funcionarios))
• π (funcionários.sobre_nome, 
departamentos.departamento_nome) (Funcionarios
l><l(DEPARTAMENTOS.DEPARTAMENTO_ID = 
FUNCIONARIOS.DEPARTAMENTO_ID)Departamentos)
• π (funcionários.sobre_nome, departamentos.departamento_nome, 
locais.cidade) (  (locais.cidade= “Toronto”) (
(Funcionarios l><l (DEPARTAMENTOS.DEPARTAMENTO_ID = 
FUNCIONARIOS.DEPARTAMENTO_ID) Departamentos)
l><l (LOCAIS.LOCAL_ID = DEPARTAMENTOS.LOCAL_ID) Locais) )

Continue navegando