Faculdade Pitágoras Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan
Unidade 6.2 Álgebra Relacional - Junção
PACIENTE cod-pac nome-pac sexo data-nasc nro-convenio 1 N 1 N CONVENIO nro-convenio descrcao CONSULTA nro-consulta cod-pac crm-medico data 1 N 1 N MEDICO crm nome EXAME nro-consulta cod-exame data-exame resultado N 1 TIPO-EXAME codexame tipo
PACIENTE CONSULTA cod-pac nome-pac sexo data-nasc nro-convenio 11111 Fulano M 01/01/1980 05 22222 Beltrana F 15/04/1794 01 33333 Ciclano M 22/06/1960 05 nro-consulta cod-pac crm-medico data 00001 33333 3456 02/01/2008 00002 33333 6766 03/01/2008 00003 11111 3456 13/03/2008 00004 22222 3456 13/03/2008 00005 11111 6766 13/03/2008 CONVENIO nro-convenio descricao 01 Unimed 02 Santa Casa 05 Cobre Tudo EXAME nro-consulta cod-exame data-exame resultado 00001 01-2 03/01/2008 Positivo 00003 02-1 13/03/2008 Acima de 100 00003 02-2 13/03/2008 Abaixo de 0 00005 01-1 13/03/2008 Positivo 00005 01-2 13/03/2008 Negativo MEDICO crm nome 3456 Dr. José 6766 Dra. Maria 8976 Dr. Cura Tudo TIPO-EXAME cod-exame tipo preco 01-1 Urina Cultura 23,44 01-2 Urina Rotina 15,55 02-1 Sangue- xxx 60,50 02-2 Sangue-yyy 35,00
Operadores fundamentais Seleção Projeção Produto Cartesiano Junção União Diferença Definição das operações
Junção Seleção aplicada a um Produto Cartesiano A operação de junção é bastante comum em consultas a bancos de dados relacionais, pois permite estabelecer relação entre tuplas de relações distintas para a formação de uma única relação. Pode ser entendida como uma seleção aplicada a um produto cartesiano.
Cross Product ou Cross Join; Operação binária; Produto Cartesiano Permite combinar informações de duas relações (combinações de cada tupla de uma relação com cada tupla da outra relação). Formato: R1 R2 Considerando-se que: R1 é uma relação com m1 colunas e n1 linhas; R2 é uma relação com m2 colunas e n2 linhas; A relação resultante terá (m1 + m2) colunas e (n1 * n2) linhas
Produto Cartesiano - Exemplo Sejam as relações R e S abaixo; Calcular o produto cartesiano R S: R A B C a1 b1 c1 a2 b1 c1 S D B C % & @ # $! R X S A R.B R.C D S.B S.C a1 b1 c1 % & @ a1 b1 c1 # $! a2 b1 c1 % & @ a2 b1 c1 # $!
Produto Cartesiano O resultado do produto cartesiano de duas tabelas é uma terceira tabela contendo todas as combinações possíveis entre os elementos das tabelas originais. CONVENIO nro-convenio descricao MEDICO crm nome 01 Unimed 02 Santa Casa 05 Cobre Tudo 3456 Dr. José 6766 Dra. Maria 8976 Dr. Cura Tudo Produto Cartesiano Convenio X Medico nro-convenio descricao crm nome 01 Unimed 3456 Dr. José 01 Unimed 6766 Dra. Maria 01 Unimed 8976 Dr. Cura Tudo 02 Santa Casa 3456 Dr. José 02 Santa Casa 6766 Dra. Maria 02 Santa Casa 8976 Dr. Cura Tudo 05 Cobre Tudo 3456 Dr. José 05 Cobre Tudo 6766 Dra. Maria 05 Cobre Tudo 8976 Dr. Cura Tudo
Junção A operação JOIN é representada por ; Usada para combinar tuplas relacionadas de relações em uma única tupla; Esta operação é muito importante para bancos de dados relacionais; Permite processar relacionamentos entre relações. A operação junção pode ser definida por um produto cartesiano seguido por uma operação SELEÇÃO.
Junção CONSULTA nro-consulta cod-pac crm-medico data 00001 33333 3456 02/01/2008 00002 33333 6766 03/01/2008 00003 11111 3456 13/03/2008 00004 22222 3456 13/03/2008 00005 11111 6766 13/03/2008 MEDICO crm nome 3456 Dr. José 6766 Dra. Maria 8976 Dr. Cura Tudo Suponha que se deseja recuperar os nomes dos médicos de cada consulta.
Junção Para obter o nome dos médicos, é necessário combinar cada tupla de consulta com tuplas de medicos; Cujo valor crm-medicoda tupla consultaseja igual ao valor de crmna tupla medico. Isto é feito usando a operação JOIN; Então, projeta-se o resultado sobre aqueles atributos necessários. Atributos (colunas) em duplicidade são eliminados.
Junção Suponha que se deseja recuperar os nomes dos médicos de cada consulta. Cons-Med consulta crm-medico=crm medico Cons_Med nro-consulta cod-pac crm-medico data crm nome 00001 33333 3456 02/01/2008 3456 Dr. José 00002 33333 6766 03/01/2008 6766 Dra. Maria 00003 11111 3456 13/03/2008 3456 Dr. José 00004 22222 3456 13/03/2008 3456 Dr. José 00005 11111 6766 13/03/2008 6766 Dra. Maria Resultado π nro-consulta, nome (Cons-Med) Resultado nro-consulta nome 00001 Dr. José 00002 Dra. Maria 00003 Dr. José 00004 Dr. José 00005 Dra. Maria
Junção A forma geral da operação JOIN sobre duas relações R1(A1, A2,..., An) e R2(B1, B2,..., Bm) é: R1 <condição join> R2 O resultado de JOIN é uma relação S com n+m atributos S(A1, A2,..., An, B1, B2,..., Bm) nesta ordem; S tem um tupla para cada combinação de tuplas uma de R1 e uma de R2 onde quer que a combinação satisfaça a condição join.
Junção Esta é a principal diferença entre Produto Cartesiano e Junção; Em Junção, apenas combinações de tuplas que satisfazem a condição join é que aparecerá no resultado; Já no Produto Cartesiano, todas as combinações de tuplas são incluídas no resultado. A condição join é especificada sobre atributos de R1 e de R2, e é avaliada para cada combinação de tuplas.
Equijunção Encontra-se mais freqüentemente Junção que envolva condições com apenas a comparação de igualdade. Uma Junção que apenas o operador de comparação =é utilizado é chamado EQUIJUNÇÃO. No resultado de uma EQUIJUNÇÃO sempre terá um ou mais pares de atributos que tem valores idênticosem todas as tuplas.
Equijunção No nosso exemplo, os atributos crm-medicoe crmsão idênticos em todas as tuplas de Cons-Med; A condição de Junção de igualdade foi especificada para estes atributos. A duplicação destes atributos na relação Cons-Med é desnecessária;
Renomear relações intermediárias Gera uma nova relação com a mesma instância e o mesmo esquema, mas com nomes diferentes para as colunas (atributos). Símbolo ρ(rho) Notação: ρ S (Relação), onde S novos nomes
Junção Natural Foi criada então uma nova operação chamada Junção Natural. Basicamente é uma EQUIJUNÇÃO seguido da remoção de atributos desnecessários. O símbolo é * Cons-Med consulta * crm-medico,crm medico Forma geral: S R1 * lista1,lista2 R2 onde lista = atributos
Junção Natural Se os atributos já tem o mesmo nome nas duas relações (no caso, nro-convenio das relações paciente e convenio), podese tirar a Junção totalmente e usar a expressão abaixo: RESULTADO paciente * convenio RESULTADO cod-pac nome-pac sexo data-nasc nro-convenio descricao 11111 Fulano M 01/01/1980 05 Cobre Tudo 22222 Beltrana F 15/04/1794 01 Unimed 33333 Ciclano M 22/06/1960 05 Cobre Tudo
Junção Natural Caso os atributos não tenham o mesmo nome, e deseje usar a junção natural, cria-se uma relação intermediária, renomeando o atributo (1), e depois utiliza-se a junção natural. Ou, faz-se na própria expressão (2). crm-medico da relação consulta e crm na relação medico 1) TEMP ρ crm-medico,nome medico Cons-Med consulta * temp 2) Cons-Med consulta * ρ crm-medico,nome medico Cons_Med nro-consulta cod-pac crm-medico data nome 00001 33333 3456 02/01/2008 Dr. José 00002 33333 6766 03/01/2008 Dra. Maria 00003 11111 3456 13/03/2008 Dr. José 00004 22222 3456 13/03/2008 Dr. José 00005 11111 6766 13/03/2008 Dra. Maria
Junção Externa Até o momento, as junções vistas casam as tuplas que satisfizerem a condição de junção junções internas (inner joins); Ex.: Para uma junção natural R * S, apenas as tuplas de R que correspondem as tuplas de S ( e vice-versa), aparecem no resultado; Logo, as tuplas sem uma tupla correspondente (ou relacionada) são eliminadas do resultado; Também as tuplas de valores null são eliminadas;
Junção Externa Se pensarmos em um relatório com todas as informações das relações componentes, podemos entender isto como uma perda de informação; As junções externas (ou outer joins) é uma saída quando queremos manter todas as tuplas em R, ou todas em S, ou todas de ambas as relações, independentemente se elas têm ou não tuplas correspondentes nas relações;
Junção Externa Junção externa à esquerda (left outer join): mantém no resultado todas as tuplas da primeira relação; Junção externa à direita (rigth outer join): mantém no resultado todas as tuplas da segunda relação; Junção externa total (full outer join): mantém no resultado todas as tuplas de ambas as relações (esquerda e direita); Valores nullsão preenchidos caso não se encontre tuplas correspondente à esquerda ou à direita;
Exemplo Junção à esquerda do nro-convenio das relações paciente e convenio. RESULTADO paciente nro-convenio=nroconvenio convenio PACIENTE cod-pac nome-pac sexo data-nasc nro-convenio 11111 Fulano M 01/01/1980 05 22222 Beltrana F 15/04/1794 01 25252 Paulo M 23/05/1976 03 33333 Ciclano M 22/06/1960 05 45454 Marta F 14/09/1950 06 CONVENIO nro-convenio descricao 01 Unimed 02 Santa Casa 05 Cobre Tudo RESULTADO cod-pac nome-pac sexo data-nasc nro-convenio descricao 11111 Fulano M 01/01/1980 05 Cobre Tudo 22222 Beltrana F 15/04/1794 01 Unimed 25252 Paulo M 23/05/1976 03 null 33333 Ciclano M 22/06/1960 05 Cobre Tudo 45454 Marta F 14/09/1950 06 null
Bons Estudos! Prof. Zaidan fhzaidan@gmail.com Somos o que fazemos repetidamente. Por isso o mérito não está na ação, e sim no hábito. Aristóteles