BANCO DE DADOS Universidade do Estado de Santa Catarina Centro de Ciências Tecnológicas Departamento de Ciência da Computação Prof. Alexandre Veloso de Matos [email protected] ROTEIRO Operações da Álgebra Relacional Operadores Especiais da Álgebra Relacional Renomeação Operadores Binários da Álgebra Relacional União, Diferença, Intersecção Junção Junção Natural ÁLGEBRA RELACIONAL Operações que permitem ao usuário especificar solicitações de recuperação de dados, cujo resultado será uma nova relação. Uma sequência de operações que utilizem operadores algébricos forma uma expressão de álgebra relacional. OPERAÇÕES DA ÁLGEBRA RELACIONAL Operações da AR desenvolvidas especificamente para os bancos de dados relacionais: Seleção. Projeção. Produto Cartesiano. Junção. Renomear. União. ... OPERADORES NA ÁLGEBRA RELACIONAL Classificação dos operadores: Fundamentais: Unários: seleção, projeção; Binários: produto cartesiano, união e diferença. Derivados: Binários: intersecção, junção e divisão. Especiais Renomeação (unário) e atribuição Operador de alteração (unário) JUNÇÃO (JOIN) O objetivo dessa operação binária é combinar tuplas RELACIONADAS de ambas tabelas (relações) formando uma tupla única. Difere de uma operação simples de produto cartesiano por incluir também uma operação de seleção. É útil em consultas complexas em que o produto cartesiano possa resultar em combinações inconsistentes. Há diferentes formatos de efetuar essa operação: Junção Natural (Natural ou Inner Join) Junções Externas (Outer Join): Left Join Right Join Full Join JUNÇÕES EXTERNAS (OUTER JOINS) Junção na qual as tuplas de uma ou ambas as relações que não são combinadas são mesmo assim preservadas no resultado. JUNÇÕES EXTERNAS (OUTER JOINS) Três tipos: Junção externa à esquerda (left [outer] join): Tuplas da relação à esquerda são preservadas na tabela resultante da junção; Preenche com valores nulos as tuplas da relação à direita que NÃO correspondem ao atributo da junção. Notação: Junção externa à direita (right [outer] join): Tuplas da relação à direita são preservadas na tabela resultante da junção; Preenche com valores nulos as tuplas da relação à esquerda que NÃO correspondem ao atributo da junção. Notação: Junção externa completa (full [outer] join): Tuplas de ambas as relações são preservadas; Preenche com valores nulos as tuplas (de qualquer relação) que NÃO correspondem ao atributo da junção. Notação: EXEMPLOS R2 R1 x y z x a b 1 1 1 1 1 1 2 1 2 2 1 2 3 3 3 4 4 4 5 5 5 x y z a b 1 1 1 1 1 2 1 2 1 2 3 3 3 5 5 5 x y z a b x y z a b 1 1 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 3 3 3 4 4 5 5 5 4 4 4 4 MAPEAMENTO PARA SQL πa1, ..., an (σ c (t1 θ X t2)) θ = t1.x > t2.x SELECT a1, ..., an FROM t1 LEFT JOIN t2 ON t1.x > t2.x WHERE c EXEMPLOS Álgebra (paciente θ X consulta) θ = paciente.cdPaciente = consulta.cdPaciente πnome (σ data = “05/12/03” (consulta θ X medico)) θ = medico.cdMedico = consulta.cdMedico SQL SELECT * FROM paciente LEFT JOIN consulta ON paciente.cdPaciente = consulta.cdPaciente SELECT nome FROM consulta RIGHT JOIN medico ON medico.cdMedico = consulta.cdMedico WHERE data = “2005-12-03” OUTROS EXEMPLOS Mostrar os nomes dos pacientes e os seus respectivos planos de saúde incluindo os que não possuem planos. SELECT nmPaciente, dePlanoSaude FROM Paciente p LEFT OUTER JOIN plano_saude ps ON p.cdPlanoSaude = ps.cdPlanoSaude OUTROS EXEMPLOS Selecione a razão social do convênio, nome e especialização dos médicos. Considerar todos os convênios, tendo eles médicos conveniados ou não. SELECT deRazaoSocial, nmMedico, deEspecializacao FROM Convenio c LEFT OUTER JOIN (medico_convenio mc , medico m) ON c.cdConvenio = mc.cdConvenio AND mc.cdMedico = m.cdMedico EXERCÍCIOS DE FIXAÇÃO (ENTREGA ATÉ 13/05) Mostrar os dados de todos os laboratórios incluindo os que não estão vinculados a nenhum convênio. Mostrar os dados de todos os convênios incluindo os que não possuem nenhum laboratório associado. Selecione os médicos, os nomes dos convênios, os nomes dos laboratórios, respectivamente de cada médico, mesmo os que não possuem laboratório ou convênio associado. DIVISÃO Operação que implica que o número de atributos de R1 seja maior que o número de atributos de R2. Se R1 tiver n atributos e R2 tiver m atributos, o resultado será uma relação com n−m atributos. Nesse caso, o resultado sempre será todas as tuplas de R1 que fazem referência a todos as tuplas de R2. Ou seja, trata-se de um operador útil para consultas em que se emprega a frase: “para todos” ou “em todos”. DIVISÃO Passo 1: Decompor a relação R1 em duas partes: R1a com n−m atributos e R1b com m atributos. R1b é uma relação que possui valores de atributos em comum com R2. Passo 2: O resultado são todas as tuplas de R1a que tenham correspondência com todos as tuplas de R2 em R1b. DIVISÃO – EXEMPLO 1 R1 R2 R1 ÷ R 2 x y z z x y 1 1 1 1 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 3 1 3 se grau(R1)>grau(R2) então Selecione todos atributos de R1 que fazem referência a todos valores de um atributo de R2 DIVISÃO – EXEMPLO 2 R1 R3 R1 x y z y z x 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 3 1 3 ÷ R3 2 se grau(R1)>grau(R3) então Selecione todos atributos de R1 que fazem referência a todos valores de um atributo de R3 DIVISÃO – EXEMPLO 3 R1 R4 x y z y 1 1 1 1 1 2 1 2 2 1 1 2 2 2 3 1 3 R1 ÷ R 4 x z 1 1 se grau(R1)>grau(R4) então Selecione todos atributos de R1 que fazem referência a todos valores de um atributo de R4 DIVISÃO Mapeamento para SQL Em SQL, não existe um operador direto para a divisão É necessário, portanto, combinar sua utilização com outros operadores