Junção de Tabelas


  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:   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".


/MARMSX/CURSOS/DBASEII