Você está na página 1de 13

Operaes relacionais e lgebra relacional

Operaes relacionais e lgebra relacional

Introduo
A discusso sobre algumas operaes bsicas de lgebra relacional realizada a seguir considera um banco de dados composto pelas seguintes relaes: funcionrio (NrMatric, NmFunc, DtAdm, Sexo, CdCargo, CdDepto) cargo (CdCargo, NmCargo, VrSalario) depto (CdDepto, NmDepto, Ramal) Os atributos sublinhados com linha contnua indicam a chave primria de cada relao enquanto que aqueles sublinhados com linha pontilhada constituem chaves estrangeiras. cargo
CdCargo C1 C3 C7 C2 C5 C4 NmCargo COZINHEIRA AUX. ESCRITRIO VIGIA MECANICO GERENTE ESCRITURARIO VrSalrio 350 450 400 750 2300 600

depto
CdDepto D1 D2 D3 D4 NmDepto ADMINISTRACAO OFICINA SERVICOS GERAIS VENDAS Ramal 221 235 243 258

funcionrio
NrMatric 1001 1004 1034 1021 1029 1095 1023 1042 1048 1015 NmFunc JOAO SAMPAIO LUCIO TORRES ROBERTO PEREIRA JOSE NOGUEIRA RUTH DE SOUZA MARIA DA SILVA LUIZ DE ALMEIDA PEDRO PINHEIRO ANA SILVEIRA PAULO RODRIGUES DtAdm 10/08/93 02/03/94 23/05/92 10/11/94 05/01/92 03/09/92 12/01/93 29/07/94 01/06/93 17/08/92 Sexo CdCargo CdDepto M C2 D2 M C2 D2 M C3 D1 M C3 D1 F C1 D3 F C4 D1 M C2 D2 M C4 D1 F C5 D1 M C2 D2

Estamos interessados em obter informaes armazenadas nesse banco de dados, e para isso deveremos formular expresses em lgebra relacional combinando apenas algumas operaes primitivas clssicas, que sero apresentadas uma a uma de forma simplificada em termos de seu significado prtico e notao. Toda operao relacional opera (age) sobre um ou mais conjuntos de dados e fornece como resultado um novo conjunto. Devido a essa caracterstica, podemos combinar mais de uma operao relacional em uma nica expresso algbrica, fazendo com que o resultado de uma operao seja utilizado como entrada para outra operao, aumentando com isso grandemente o poder dessa linguagem de consulta. Suponha que, inicialmente, precisamos obter o nome completo de todos os funcionrios de nosso banco de dados. Para isso ser necessrio executar uma operao chamada Projeo.

Antonio Cesar de Barros Munari

Operaes relacionais e lgebra relacional

Projeo
Geralmente indicada na literatura por (a letra grega pi) produz um conjunto onde h um elemento para cada elemento do conjunto de entrada, sendo que a estrutura dos membros do conjunto resultante definida nos argumentos da operao. Pode ser entendida como uma operao que filtra as colunas de uma tabela. Por operar sobre apenas um conjunto de entrada, a projeo classificada como uma operao unria. Ex.:
NmFunc

(funcionrio)

essa expresso produz um conjunto contendo um elemento para cada funcionrio, e cada elemento contm apenas a informao referente a NmFunc da relao funcionrio original. funcionrio
NrMatric 1001 1004 1034 1021 1029 1095 1023 1042 1048 1015 NmFunc JOAO SAMPAIO LUCIO TORRES ROBERTO PEREIRA JOSE NOGUEIRA RUTH DE SOUZA MARIA DA SILVA LUIZ DE ALMEIDA PEDRO PINHEIRO ANA SILVEIRA PAULO RODRIGUES DtAdm 10/08/93 02/03/94 23/05/92 10/11/94 05/01/92 03/09/92 12/01/93 29/07/94 01/06/93 17/08/92 Sexo CdCargo CdDepto M C2 D2 M C2 D2 M C3 D1 M C3 D1 F C1 D3 F C4 D1 M C2 D2 M C4 D1 F C5 D1 M C2 D2

Projeo: NmFunc

funcionrio
NmFunc JOAO SAMPAIO LUCIO TORRES ROBERTO PEREIRA JOSE NOGUEIRA RUTH DE SOUZA MARIA DA SILVA LUIZ DE ALMEIDA PEDRO PINHEIRO ANA SILVEIRA PAULO RODRIGUES

Agora estamos interessados em identificar todos os funcionrios de sexo masculino existentes no banco de dados. uma situao que no podemos resolver com projees apenas, uma vez que deveremos descartar elementos do conjunto inicial. Para casos desse tipo existe uma operao relacional chamada Seleo.

Antonio Cesar de Barros Munari

Operaes relacionais e lgebra relacional

Seleo (ou Restrio)


Indicada por (a letra grega sigma), uma operao que para um conjunto inicial fornecido como argumento, produz um subconjunto estruturalmente idntico, mas apenas com os elementos do conjunto original que atendem a uma determinada condio (tambm chamada de predicado). A seleo pode ser entendida como uma operao que filtra as linhas de uma tabela, e tambm uma operao unria, j que opera sobre um nico conjunto de dados. Ex.:
Sexo = M

(funcionrio)

produz o conjunto dos elementos de funcionrio que atendem ao predicado [Sexo = M], ou seja, representa um subconjunto dos funcionrios para o qual essa condio avaliada como verdadeira. funcionrio
NrMatric 1001 1004 1034 1021 1029 1095 1023 1042 1048 1015 NmFunc JOAO SAMPAIO LUCIO TORRES ROBERTO PEREIRA JOSE NOGUEIRA RUTH DE SOUZA MARIA DA SILVA LUIZ DE ALMEIDA PEDRO PINHEIRO ANA SILVEIRA PAULO RODRIGUES DtAdm 10/08/93 02/03/94 23/05/92 10/11/94 05/01/92 03/09/92 12/01/93 29/07/94 01/06/93 17/08/92 Sexo CdCargo CdDepto M C2 D2 M C2 D2 M C3 D1 M C3 D1 F C1 D3 F C4 D1 M C2 D2 M C4 D1 F C5 D1 M C2 D2

Seleo: Sexo = M

funcionrio
NrMatric 1001 1004 1034 1021 1023 1042 1015 NmFunc JOAO SAMPAIO LUCIO TORRES ROBERTO PEREIRA JOSE NOGUEIRA LUIZ DE ALMEIDA PEDRO PINHEIRO PAULO RODRIGUES DtAdm 10/08/93 02/03/94 23/05/92 10/11/94 12/01/93 29/07/94 17/08/92 Sexo CdCargo CdDepto M C2 D2 M C2 D2 M C3 D1 M C3 D1 M C2 D2 M C4 D1 M C2 D2

No caso de querermos descobrir o nome completo e a data de admisso de todos os funcionrios do sexo feminino existentes na empresa, ser necessrio combinar uma projeo com uma seleo. Isso porque se decidirmos projetar as colunas desejadas diretamente a partir da relao funcionrio, estaremos considerando tambm os elementos do sexo masculino, o que no queremos. Como a projeo no permite descartar linhas, apenas colunas, deveremos fornecer a essa operao o subconjunto resultante de uma filtragem (seleo) da relao de funcionrios original, como mostram as duas figuras a seguir, que representam as relaes e as operaes de duas maneiras diferentes.
Antonio Cesar de Barros Munari 3

Operaes relacionais e lgebra relacional

funcionrio

Seleo (sexo=F)

funcionrio

Projeo (NmFunc, DtAdm)

funcionrio

Ruth ..., 5/1/92

Maria ..., 3/9/92

Ana ..., 1/6/93

funcionrio
NrMatric 1001 1004 1034 1021 1029 1095 1023 1042 1048 1015 NmFunc JOAO SAMPAIO LUCIO TORRES ROBERTO PEREIRA JOSE NOGUEIRA RUTH DE SOUZA MARIA DA SILVA LUIZ DE ALMEIDA PEDRO PINHEIRO ANA SILVEIRA PAULO RODRIGUES DtAdm 10/08/93 02/03/94 23/05/92 10/11/94 05/01/92 03/09/92 12/01/93 29/07/94 01/06/93 17/08/92 Sexo CdCargo CdDepto M C2 D2 M C2 D2 M C3 D1 M C3 D1 F C1 D3 F C4 D1 M C2 D2 M C4 D1 F C5 D1 M C2 D2

Seleo: Sexo = F

funcionrio
NrMatric 1029 1095 1048 NmFunc RUTH DE SOUZA MARIA DA SILVA ANA SILVEIRA DtAdm 05/01/92 03/09/92 01/06/93 Sexo CdCargo CdDepto F C1 D3 F C4 D1 F C5 D1

Projeo: NmFunc, DtAdm

funcionrio
NmFunc RUTH DE SOUZA MARIA DA SILVA ANA SILVEIRA DtAdm 05/01/92 03/09/92 01/06/93

Antonio Cesar de Barros Munari

Operaes relacionais e lgebra relacional Assim, a expresso que atende nossos objetivos nesse caso
NmFunc, DtAdm

Sexo = F

(funcionrio))

cabendo observar que devido ao aninhamento das operaes est implcito que primeiro ser executada a seleo e depois a projeo, sendo que nesse exemplo no poderamos inverter essa ordem (voc poderia explicar porqu?). Por esse motivo, dizemos que a lgebra relacional uma linguagem procedural, j que requer alguma definio quanto ordem em que as operaes sero realizadas. Linguagens em que apenas mencionamos o resultado desejado, sem fazer meno alguma forma como isso deve ser feito so chamadas de linguagens no-procedurais. Suponha agora que precisamos obter o nome completo, a data de admisso e o salrio de cada funcionrio cadastrado. Para essa consulta temos um fato novo, que a referncia a colunas de mais de uma tabela, uma vez que o nome e a data de admisso fazem parte da relao funcionrio, enquanto que o salrio existe apenas em cargos. Isso problemtico, pois as duas operaes que conhecemos at o momento so unrias, e temos necessidade de combinar os dados de mais de uma relao. Para situaes como essa existe uma operao chamada Produto Cartesiano.

Produto cartesiano
A notao geralmente adotada (na forma conjunto1 x conjunto2) para representar essa operao binria indica bem a sua natureza: o resultado do produto cartesiano de duas tabelas uma terceira tabela contendo todas as combinaes possveis entre os elementos das tabelas originais. Essa tabela resultante possuir um nmero de colunas que igual soma das quantidades de colunas das duas tabelas iniciais, e um nmero de linhas igual ao produto do nmero de suas linhas. Portanto, se fizermos o produto cartesiano de uma tabela A que possua 4 colunas e 10 linhas com uma tabela B onde existem 3 colunas e 7 linhas, a tabela resultante ter 4+3= 7 colunas e 10*7= 70 linhas. Assim, cada linha dessa tabela corresponder concatenao de uma linha da primeira tabela com uma linha da segunda. O produto cartesiano no muito usado como um fim em si mesmo, ou seja, dificilmente estaremos interessados em saber quais so todas as combinaes possveis entre as linhas de duas tabelas, pois a utilidade prtica desse tipo de conhecimento muito discutvel. Entretanto, a nica forma primitiva de que dispomos para fundir informaes de duas tabelas heterogneas para posterior processamento. Nesse caso, tipicamente ser necessrio executar uma Seleo sobre o resultado do Produto Cartesiano, de maneira a descartar as combinaes invlidas entre as linhas das tabelas originais. Ex.:
NmFunc, DtAdm, VrSalrio

funcionrio.CdCargo = cargo.CdCargo

(funcionrio x cargo))

observe que primeiro produzido o produto cartesiano correspondente a todas as combinaes possveis entre funcionrios e cargos. Essa relao vai conter linhas onde um funcionrio estar associado a cargos que no so o seu, e devemos ento aplicar um filtro (uma seleo) para gerar um subconjunto apenas com as combinaes logicamente vlidas (aquelas em que a chave estrangeira CdCargo de funcionrio tem valor igual chave primria CdCargo de cargo). Como temos nesse subconjunto duas colunas com o mesmo nome (CdCargo que veio de funcionrio e CdCargo proveniente de cargo), sempre que precisarmos mencionar uma delas ser necessrio especificar exatamente a qual das duas
Antonio Cesar de Barros Munari 5

Operaes relacionais e lgebra relacional colunas estamos nos referindo, seno teremos uma situao ambgua, formalmente inaceitvel. Dizemos, nesse caso, que necessrio qualificar a coluna, e isso feito escrevendo o nome da relao original antes do nome da coluna, separando-os por um ponto, ou seja, <nome-da-relao>.<nome-da-coluna>. por esse motivo que escrevemos o predicado da seleo como sendo funcionrio.CdCargo = cargo.CdCargo. Finalmente, a projeo realizada a partir desse subconjunto, fornecendo os dados inicialmente desejados. funcionrio
NrMatric 1001 1004 1034 1021 1029 1095 1023 1042 1048 1015 NmFunc JOAO SAMPAIO LUCIO TORRES ROBERTO PEREIRA JOSE NOGUEIRA RUTH DE SOUZA MARIA DA SILVA LUIZ DE ALMEIDA PEDRO PINHEIRO ANA SILVEIRA PAULO RODRIGUES DtAdm Sexo CdCargo CdDepto 10/08/93 M C2 D2 02/03/94 M C2 D2 23/05/92 M C3 D1 10/11/94 M C3 D1 05/01/92 F C1 D3 03/09/92 F C4 D1 12/01/93 M C2 D2 29/07/94 M C4 D1 01/06/93 F C5 D1 17/08/92 M C2 D2

cargo
CdCargo C1 C3 C7 C2 C5 C4 NmCargo VrSalrio COZINHEIRA 350 AUX. ESCRIT. 450 VIGIA 400 MECANICO 750 GERENTE 2300 ESCRITURARIO 600

Produto cartesiano: funcionrio x cargo

(continua na prxima pgina)

Antonio Cesar de Barros Munari

Operaes relacionais e lgebra relacional funcionrio_cargo


NrMatric NmFunc 1001 1001 1001 1001 1001 1001 ... 1021 1021 1021 ... 1015 JOAO SAMPAIO JOAO SAMPAIO JOAO SAMPAIO JOAO SAMPAIO JOAO SAMPAIO JOAO SAMPAIO ... JOSE NOGUEIRA JOSE NOGUEIRA JOSE NOGUEIRA ... DtAdm 10/08/93 10/08/93 10/08/93 10/08/93 10/08/93 10/08/93 ... 10/11/94 10/11/94 10/11/94 ... Sexo CdCargo CdDepto CdCargo NmCargo M M M M M M ... M M M ... M C2 C2 C2 C2 C2 C2 ... C3 C3 C3 ... C2 D2 D2 D2 D2 D2 D2 ... D1 D1 D1 ... D2 C1 C3 C7 C2 C5 C4 ... C1 C3 C7 ... C4 COZINHEIRA AUX. ESCRITRIO VIGIA MECANICO GERENTE ESCRITURARIO ... COZINHEIRA AUX. ESCRITRIO VIGIA ... ESCRITURARIO VrSalario 350 450 400 750 2300 600 ... 350 450 400 ... 600

PAULO RODRIGUES 17/08/92

Seleo: funcionrio.CdCargo = cargo.CdCargo

funcionrio_cargo
NrMatric NmFunc 1001 1004 1034 1021 1029 1095 1023 1042 1048 1015 JOAO SAMPAIO LUCIO TORRES JOSE NOGUEIRA RUTH DE SOUZA MARIA DA SILVA LUIZ DE ALMEIDA PEDRO PINHEIRO ANA SILVEIRA DtAdm 10/08/93 02/03/94 10/11/94 05/01/92 03/09/92 12/01/93 29/07/94 01/06/93 Sexo CdCargo CdDepto CdCargo NmCargo M M M M F F M M F M C2 C2 C3 C3 C1 C4 C2 C4 C5 C2 D2 D2 D1 D1 D3 D1 D2 D1 D1 D2 C2 C2 C3 C3 C1 C4 C2 C4 C5 C2 MECANICO MECANICO AUX. ESCRITRIO AUX. ESCRITRIO COZINHEIRA ESCRITURARIO MECANICO ESCRITURARIO GERENTE MECANICO VrSalario 750 750 450 450 350 600 750 600 2300 750

ROBERTO PEREIRA 23/05/92

PAULO RODRIGUES 17/08/92

Projeo: NmFunc, DtAdm, VrSalrio

(continua na prxima pgina)

Antonio Cesar de Barros Munari

Operaes relacionais e lgebra relacional funcionrio_cargo


NmFunc JOAO SAMPAIO LUCIO TORRES JOSE NOGUEIRA RUTH DE SOUZA MARIA DA SILVA LUIZ DE ALMEIDA PEDRO PINHEIRO ANA SILVEIRA DtAdm VrSalario 10/08/93 02/03/94 10/11/94 05/01/92 03/09/92 12/01/93 29/07/94 01/06/93 750 750 450 450 350 600 750 600 2300 750

ROBERTO PEREIRA 23/05/92

PAULO RODRIGUES 17/08/92

Caso desejemos obter uma variao ligeiramente diferente dessa consulta, acrescentando a restrio de que precisamos dos dados apenas dos funcionrios do sexo masculino, teramos a seguinte expresso algbrica:
NmFunc, DtAdm, VrSalrio

funcionrio.CdCargo = cargo.CdCargo Sexo = M(funcionrio

x cargo))

onde o smbolo presente no predicado representa o conectivo lgico E. Portanto, com apenas 3 operaes relacionais bsicas foi possvel extrair do banco de dados de exemplo vrias informaes importantes, representativas de uma grande parcela das consultas que um sistema gerenciador de bancos de dados deve processar. As consultas realizadas foram: 1. obter o nome completo de todos os funcionrios; 2. identificar todos os funcionrios do sexo masculino; 3. obter o nome completo e a data de admisso de todos os funcionrios do sexo feminino; 4. obter o nome completo, a data de admisso e o salrio de todos os funcionrios; 5. descobrir o nome completo, a data de admisso e o salrio de todos os funcionrios do sexo masculino.

Antonio Cesar de Barros Munari

Operaes relacionais e lgebra relacional

Diferena entre conjuntos: A B


uma operao primitiva que requer como operandos duas tabelas unio-compatveis, ou seja, estruturalmente idnticas. O resultado uma tabela que possui todas as linhas que existem na primeira tabela e no existem na segunda.

A B

Observe que A B diferente de B A.

Unio: A B
Esta operao primitiva tambm requer como operandos tabelas unio-compatveis. Produz como resultado uma tabela que contm todas as linhas da primeira tabela seguidas de todas as linhas da segunda tabela. A tabela resultante possui a mesma quantidade de colunas que as tabelas originais, e tem um nmero de linhas que no mximo igual soma das linhas das tabelas f rnecidas como operandos, j que as linhas que so comuns a ambas as tabelas o aparecem uma nica vez no resultado.

Observe que A B = B A.

Antonio Cesar de Barros Munari

Operaes relacionais e lgebra relacional

Interseco: A B
Esta uma operao adicional que produz como resultado uma tabela que contm, sem repeties, todos os elementos que so comuns s duas tabelas fornecidas como operandos. As tabelas devem ser unio-compatveis.

A B

O mesmo efeito pode ser obtido fazendo-se uma combinao de diferenas entre conjuntos

AB=A(A B)
ou com unies e diferenas

A B = ( A B ) ( A B ) ( B A ) ou ainda AB=(A B)((AB)(B A)) Juno: A |X| B


uma operao que produz uma combinao entre as linhas de uma tabela com as linhas correspondentes de outra tabela, sendo em princpio correspondente a uma seleo pelos atributos de relacionamento sobre um produto cartesiano dessas tabelas:

A |x| B =

A.chave1 = B.chave2 ( A x B )

A operao de juno foi criada justamente porque esse tipo de combinao de tabelas de uso muito comum, facilitando com isso a escrita de expresses. A tabela resultante de uma juno tem todas as colunas da primeira tabela e todas da segunda tabela. Isso faz com que os valores dos campos utilizados como critrio para a correspondncia entre as linhas aparea duplicado, j que um vem da primeira tabela e outro da segunda. Existe uma variao da juno, chamada juno natural, que fornece o mesmo resultado, mas sem essa repetio de valores: uma das colunas correspondentes aos atributos de relacionamento descartada.

Renomeao: <novo_nome> ( A )
Geralmente representada pelo smbolo (a letra grega rho minscula), esta operao unria primitiva redefine o nome de uma tabela em um determinado contexto. til para autoAntonio Cesar de Barros Munari 10

Operaes relacionais e lgebra relacional relacionamentos, onde precisamos fazer a juno de uma tabela com ela mesma, e nesse caso cada verso da tabela precisa receber um nome diferente da outra.

Diviso: A B
uma operao adicional que produz como resultado a projeo de todos os elementos da primeira tabela que se relacionam com todos os elementos da segunda tabela. Ex.: queremos saber os nomes dos departamentos que possuem todos os cargos:

NmDepto, CdCargo ( depto |x| funcionrio ) CdCargo ( cargo ) Atribuio: varivel A


Permite que o contedo de uma tabela seja atribudo (colocado) em uma varivel especial, oferecendo a possibilidade de um tratamento at certo ponto algortmico para algumas seqncias de operaes.

Resumo
Smbolo Operao x |x| Seleo / Restrio Projeo Unio Interseco Diferena de conjuntos Produto cartesiano Juno Diviso Renomeao Atribuio Sintaxe condio ( Relao )
expresses

Tipo Primitiva Primitiva Primitiva Adicional Primitiva Primitiva Adicional Adicional Primitiva Adicional

( Relao )

Relao1 Relao2 Relao1 Relao2 Relao1 - Relao2 Relao1 x Relao2 Relao1 |x| Relao2 Relao1 Relao2 nome ( Relao ) varivel Relao

Antonio Cesar de Barros Munari

11

Operaes relacionais e lgebra relacional

Exerccios
Com base nas tabelas Funcionrio, Cargo e Depto apresentadas neste material, elaborar as expresses da lgebra relacional que obtenham: 1) Todos os funcionrios do departamento D1. 2) O nome e a matrcula de todos os funcionrios do departamento D1. 3) A matrcula e o nome do respectivo departamento de todos os funcionrios. 4) O nome dos funcionrios que ganham mais de $500. 5) O ramal do funcionrio ANA SILVEIRA. 6) Os nomes de todos os funcionrios com cargo de MECANICO. 7) Os nomes de todos os funcionrios que trabalham no mesmo departamento que JOSE NOGUEIRA. 8) Os nomes dos departamentos que possuem tanto funcionrios como funcionrias.

Antonio Cesar de Barros Munari

12

Você também pode gostar