|
NOME |
SOBRENOME |
Cecília |
Ortiz Rezende |
João |
da Silva |
Laura |
Nogueira |
Elaine |
Cristina |
Paulo |
Vidigal |
Pedro |
Teodoro |
Sandra |
Oliveira |
Marcio |
Santos |
Elisabeth |
de Souza |
INSTRUTORES
NOME |
SOBRENOME |
Joel |
Nunes |
Marcio |
Santos |
Paula |
Andrade |
Reinaldo |
Fagundes |
Cecília |
Ortiz Rezende |
Exemplo 1:
Result1 <----- ALUNOS – INSTRUTORES
RESULT1
NOME |
SOBRENOME |
João |
da Silva |
Laura |
Nogueira |
Elaine |
Cristina |
Paulo |
Vidigal |
Pedro |
Teodoro |
Sandra |
Oliveira |
Elisabeth |
de Souza |
Exemplo 2:
Result2 <----- INSTRUTORES – ALUNOS
RESULT2
NOME |
SOBRENOME |
Joel |
Nunes |
Paula |
Andrade |
Reinaldo |
Fagundes |
Operação de Produto Cartesiano (Product)
O Produto Cartesiano é a combinação de tuplas das duas relações em questão.
O resultado é que, para cada tupla da primeira relação, haverá a combinação com todas as tuplas da segunda relação, e vice-versa.
Simbologia: x
Sintaxe: (Relação 1) x (Relação 2)
Como exemplo, considere as relações abaixo:
ALUNOS
NOME |
SOBRENOME |
Cecília |
Ortiz Rezende |
João |
da Silva |
Laura |
Nogueira |
Elaine |
Cristina |
DISCIPLINA
COD_DISC |
DESCRICAO |
1 |
Fundamentos de Bando de Dados |
2 |
Linguagem de Programação |
3 |
Introdução aos Sistemas Operacionais |
RESULT <----- ALUNOS X INSTRUTORES
RESULT
NOME |
SOBRENOME |
COD_DISC |
DESCRICAO |
Cecília |
Ortiz Rezende |
1 |
Fundamentos de Bando de Dados |
Cecilia |
Ortiz Rezende |
2 |
Linguagem de Programação |
Cecilia |
Ortiz Rezende |
3 |
Introdução aos Sistemas Operacionais |
João |
da Silva |
1 |
Fundamentos de Bando de Dados |
João |
da Silva |
2 |
Linguagem de Programação |
João |
da Silva |
3 |
Introdução aos Sistemas Operacionais |
Laura |
Nogueira |
1 |
Fundamentos de Bando de Dados |
Laura |
Nogueira |
2 |
Linguagem de Programação |
Laura |
Nogueira |
3 |
Introdução aos Sistemas Operacionais |
Elaine |
Cristina |
1 |
Fundamentos de Bando de Dados |
Elaine |
Cristina |
2 |
Linguagem de Programação |
Elaine |
Cristina |
3 |
Introdução aos Sistemas Operacionais |
Operação de Junção (Join)
Veremos agora as duas últimas operações que interagem com o modelo relacional.
A operação de junção é utilizada para combinar tuplas de duas relações partindo dos atributos comuns a ambas.
O resultado conterá as colunas das duas relações que estão participando da junção.
Esta operação é de extrema importância em bancos de dados relacionais, pois é através dela que nos é permitido fazer relacionamento.
Simbologia: |x|
Sintaxe: (Relação 1) |x| <condição de junção> (Relação 2)
Uma condição de junção pode ser formada por mais de uma condição simples, apenas aplicando os operadores relacionais AND ou OR.
Vejamos um exemplo, considerando as seguintes tabelas:
ALUNOS
NOME |
SOBRENOME |
TURMA |
Cecília |
Ortiz Rezende |
2TI |
João |
da Silva |
1TI |
Laura |
Nogueira |
2TI |
Elaine |
Cristina |
2TI |
TURMAS
COD_TURMA |
DESCRICAO |
1TI |
1º Módulo - Informática |
2TI |
2º Módulo - Informática |
1TA |
1º Módulo - Administração |
2TA |
2º Módulo - Administração |
ALU_TUR <----- ALUNOS |x| TURMA=COD_TURMA TURMAS
ALU_TUR
NOME |
SOBRENOME |
TURMA |
COD_TURMA |
DESCRICAO |
Cecília |
Ortiz Rezende |
2TI |
2TI |
2º Módulo - Informática |
João |
da Silva |
1TI |
1TI |
1º Módulo - Informática |
Laura |
Nogueira |
2TI |
2TI |
2º Módulo - Informática |
Elaine |
Cristina |
2TI |
2TI |
2º Módulo - Informática |
E finalmente, podemos usar um conjunto de operações para trazer, por exemplo, apenas os alunos que cursam o 2º módulo de Informática:
RESULT <----- COD_TURMA>=2TI ( NOME, SOBRENOME, DESCRICAO (ALUNOS |x| TURMA=COD_TURMA TURMAS))
RESULT
NOME |
SOBRENOME |
DESCRICAO |
Cecilia |
Ortiz Rezende |
2º Módulo - Informática |
Laura |
Nogueira |
2º Módulo - Informática |
Elaine |
Cristina |
2º Módulo - Informática |
Operação de Divisão (Divide)
É uma operação adicional que produz como resultado a projeção de todos os elementos da primeira relação que se relacionam com todos os elementos da segunda relação.
Não é um operador primitivo, mas pode ter o resultado obtido por uma combinação de operadores primitivos.
Simbologia:
Sintaxe: (Relação 1) (Relação 2)
Vejamos no exemplo abaixo:
EQUIPE
ID_EMP |
COD_PROJ |
17206-2 |
001 |
12584-7 |
002 |
16764-6 |
001 |
17206-2 |
002 |
15698-3 |
003 |
17206-2 |
003 |
PROJETOS
COD_PROJ |
DESCRICAO |
001 |
Sistema IRPF |
002 |
Sistema RH |
003 |
Sistema Banco |
FUNCIONARIO
ID_EMP |
NOME |
CARGO |
17206-2 |
Jorge |
Analista |
12584-7 |
Paula |
Programadora |
16764-6 |
Frederico |
DBA |
15698-3 |
Heloisa |
Web Master |
Imagine a situação de querermos saber quais os funcionários que trabalham em todos os projetos:
RESULT <----- ( COD_PROJ (PROJETOS)) ( ID_EMP, COD_PROJ (EQUIPE))
RESULT
ID_EMP |
17206-2 |
SÍMBOLO |
OPERAÇÃO |
SINTAXE |
TIPO |
<----- |
Atribuição |
Variável <----- Relação |
Primitiva |
Seleção (Select) |
<condicao de elecao>(Relação) |
Primitiva |
|
Projeção (Project) |
<lista de atributos>(Relação) |
Primitiva |
|
União (Union) |
(Relação 1) (Relação 2) |
Primitiva |
|
Interseção (Intersection) |
(Relação 1) (Relação 2) |
Adicional |
|
– |
Diferença (Difference) |
Sintaxe: (Relação 1) – (Relação 2) | Primitiva |
X |
Produto Cartesiano (Product) |
(Relação 1) X (Relação 2) |
Primitiva |
|x| |
Junção (Join) |
(Relação 1) |x| <condição de junção> (Relação 2) |
Adicional |
Divisão (Divide) |
(Relação 1) (Relação 2) |
Adicional |
Conclusões
Finalizamos aqui a série de artigos sobre Álgebra Relacional. Tivemos uma boa noção de como é trabalhada a lógica de consultas através desta linguagem formal e podemos concluir que é uma ótima metodologia de desenvolvimento de raciocínio por parte de quem está aplicando a técnica.
Este desenvolvimento de raciocínio lógico em consultas a bancos de dados será muito útil na construção de instruções que irão interagir com o banco de dados, porém construindo essas instruções de maneira performática, tirando o máximo de desempenho possível.
Aguardo sua visita em nosso próximo artigo.
Até lá.
Ricardo Rezende (ricardo@sqlmagazine.com.br) é DBA Oracle na IBM do Brasil em projeto internacional, possui cursos oficiais pela Oracle University, consultor independente de Bancos de Dados, subeditor da revista SQL Magazine, editor do Website da SQL Magazine e professor licenciado pelo Centro Estadual de Educação Tecnológica “Paula Souza” na unidade de Taubaté-SP. |
Todos
os direitos reservados: DevMedia Group
SQL Magazine
- 2004