Curso de dBASE II
Junção de Tabelas
Você está em: MarMSX >> Cursos >> dBASE II
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.
Duas tabelas ao mesmo tempo
O comando "select primary/secondary" permite a escolha entre trabalhar com a tabela primária (primary) ou com a tabela secundária (secondary).
Finalmente vamos poder utilizar juntas as duas tabelas criadas: 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
Fazendo referência à cada tabela
Cada tabela é referenciada, colocando-se antes do nome do campo:
- .p - referencia a tabela primária.
- .s - referencia a tabela secundária.
Exemplo:
. display p.nome,s.bim1
O comando acima irá pegar o registro atual da tabela primária e o registro atual da tabela secundária.
Observa-se que nem sempre o mesmo número de registro de duas tabelas estão relacionados entre si. As duas tabelas apresentadas são uma exceção.
Quando os registros possuirem correlação, como no nosso exemplo, podemos ligar os ponteiros das tabelas, através do comando "set linkage on", antes do carregamento das tabelas.
. set linkage on
. set primary
. use alunos
. set 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
Para fechar uma tabela em uso, utilize o comando "clear".
Junção de tabelas
O comando "join" junta duas tabelas em outra tabela, baseado em um ou mais campos afins. Esse procedimento é mais seguro para juntar duas tabelas, pois baseia-se sempre em alguma condição de afinidade.
A sintaxe é:
join to <nome_tabela> for <condição> [field <nome_dos_campos_afins>]
Vamos juntar as tabelas alunos e notasmat em uma só:
. join to fulltab for p.matricula=s.matricula
Agora, ele colocará na mesma linha os registro que possuirem o mesmo valor para matrícula. Dessa forma, não importa em que registros os dados de um aluno e suas notas estejam.
A seguir, vamos listar 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 exibir os nomes com as respectivas notas. O exemplo a seguir, lista todos os alunos e suas respectivas médias nos quatro bimestres.
. display 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".