O objetivo desse capítulo é mostrar como o dBASE II pode trabalhar com duas tabelas em memória e realizar a junção entre elas.
O comando SELECT PRIMARY/SECONDARY permite a escolha entre trabalhar com a tabela primária (PRIMARY) ou com a tabela secundária (SECONDARY). Assim, vamos poder utilizar as duas tabelas criadas até aqui juntas: a tabela alunos e a tabela notasmat.
Digite então:
. select primary . use alunos . select secondary . use notasmat
A tabela alunos ficou como a tabela primária, enquanto que a tabela notasmat ficou como a tabela secundária.
O último comando SELECT PRIMARY/SECONDARY dado é que define a tabela em uso. No exemplo acima, a tabela em uso é a secundária, ou seja, a tabela notasmat.
Ao darmos o comando DISPLAY ALL, essa tabela é listada.
. display all 00001 8361 8.0 7.5 8.0 7.5 00002 4321 6.0 5.5 8.0 7.0 00003 5543 7.0 7.7 6.0 7.0 00004 8437 8.5 9.0 9.5 9.0 00005 7193 10.0 10.0 9.7 9.9 00006 3398 8.0 7.0 7.5 9.0 00007 9001 5.5 4.0 7.0 7.0 00008 6567 7.5 9.0 8.0 7.0 00009 6201 7.0 8.0 7.0 7.0 00010 7766 8.0 8.5 7.0 7.0
Para modificar a tabela em uso, devemos digitar select primary ou secondary.
. select primary
Através do comando acima, trocamos a tabela em uso de notasmat para alunos.
Cada tabela é referenciada, colocando-se antes do nome do campo:
Exemplo:
. display p.nome,s.bim1
O comando acima irá retornar o registro atual da tabela primária e o registro atual da tabela secundária.
Observe que o ponteiro de registros em cada tabela pode estar apontado para posições distintas. Por exemplo, na tabela primária poderia estar apontando para o registro 2, enquanto que na tabela secundária para o registro 10. O resultado não faria o menor sentido, pois retornaria:
00010 Ana Maria Silva 8.0
A nota do primeiro bimestre (bim1) apresentada é da Paula Tavares e não da Ana Maria, que tirou 6.0.
Quando cada entidade (pessoa ou coisa) está sempre localizada na mesma linha nas duas tabelas, como no nosso caso (por exemplo, os dados e as notas do Pablo estão na linha 1 nas duas tabelas), podemos ligar os ponteiros das tabelas, através do comando SET LINKAGE ON, antes do carregamento das tabelas. Veja o exemplo a seguir.
. set linkage on . select primary . use alunos . select secondary . use notasmat . display all p.nome,s.bim1 00001 Pablo Goncalves 8.0 00002 Ana Maria Silva 6.0 00003 Waldir Moraes 7.0 00004 Alvaro Schwarz 8.5 00005 Beatriz Saraiva 10.0 00006 Mauro Pontes 8.0 00007 Pedro Tavares 5.5 00008 Suely Albuquerque 7.5 00009 Pedro Borges 7.0 00010 Paula Tavares 8.0
O comando SET LINKAGE ON deve ser dado antes de selecionarmos as tabelas primária e secundária.
Para fechar uma tabela em uso, utilize o comando CLEAR.
Quando tivermos duas tabelas onde as entidades estejam localizadas em linhas diferentes (ou até em mais de uma linha), devemos utilizar o comando JOIN para relacionar as entidades. O comando JOIN será visto na próxima seção.
O comando JOIN junta duas tabelas em outra tabela, baseado em um ou mais campos relacionados. Esse procedimento é mais seguro para juntar duas tabelas.
A sintaxe é:
JOIN to <nome_tabela> for <condição> [field <lista_de_campos>]
Onde:
No nosso exemplo, qual o campo que pode ser utilizado para relacionar as entidades nas duas tabelas? O campo matrícula.
Vamos juntar as tabelas alunos e notasmat em uma só. Caso as tabelas não estejam ativas, vamos fazê-las.
. select primary . use alunos . select secondary . use notasmat
Juntamos as tabelas através do campo matricula das duas tabelas. A expressão de igualdade procura e junta as linhas onde os valores de matrícula forem iguais.
. join to fulltab for p.matricula=s.matricula
Agora, o programa colocará na mesma linha os registros das duas tabelas que possuirem o mesmo valor para matrícula. Dessa forma, não importa em que linha os registros de dados e nota de um aluno e suas notas estejam em cada tabela, que o programa resolve o problema.
A seguir, listamos o resultado.
. use fulltab . display all 00001 8361 Pablo Goncalves 11 M 5 8361 8.0 7.5 8.0 7.5 00002 4321 Ana Maria Silva 11 F 5 4321 6.0 5.5 8.0 7.0 00003 5543 Waldir Moraes 12 M 6 5543 7.0 7.7 6.0 7.0 00004 8437 Alvaro Schwarz 12 M 5 8437 8.5 9.0 9.5 9.0 00005 7193 Beatriz Saraiva 13 F 6 7193 10.0 10.0 9.7 9.9 00006 3398 Mauro Pontes 11 M 5 3398 8.0 7.0 7.5 9.0 00007 9001 Pedro Tavares 13 M 6 9001 5.5 4.0 7.0 7.0 00008 6567 Suely Albuquerque 12 F 6 6567 7.5 9.0 8.0 7.0 00009 6201 Pedro Borges 11 M 5 6201 7.0 8.0 7.0 7.0 00010 7766 Paula Tavares 13 F 6 7766 8.0 8.5 7.0 7.0
A partir da junção das tabelas, podemos finalmente exibir os nomes com as respectivas notas ou a média. No exemplo a seguir, listamos os alunos e suas respectivas médias em matemática nos quatro bimestres.
. display all nome,(bim1+bim2+bim3+bim3)/4 00001 Pablo Goncalves 7.7 00002 Ana Maria Silva 6.6 00003 Waldir Moraes 6.9 00004 Alvaro Schwarz 9.0 00005 Beatriz Saraiva 9.9 00006 Mauro Pontes 7.8 00007 Pedro Tavares 5.8 00008 Suely Albuquerque 7.8 00009 Pedro Borges 7.2 00010 Paula Tavares 7.6
Obs: para sair do dBASE II, digite "quit".
<< Anterior | dBASE II | Próxima >> |