Baixe o app para aproveitar ainda mais
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) )
Compartilhar