///
Considere uma tabela de banco de dados que represente a árvore genealógica simplificada da família real brasileira, como mostrada a seguir.
| Ancestral | Descendente |
|---|---|
| Dom João VI | Dom Pedro I |
| Dom Pedro I | Dom Pedro II |
| Dom Pedro II | Dona Leopoldina |
| Dona Leopoldina | Dom Luis de Orleans |
| Dom Luis de Orleans | Dom Pedro Henrique |
Rafael pretende escrever um comando SQL que insira nessa tabela as relações de ancestralidade que podem ser derivadas das que ali estão. Por exemplo, Dona Leopoldina é descendente de Dom Pedro I porque descende de Dom Pedro II, que descende de Dom Pedro I.
Assim, Rafael escreveu o comando SQL
insert into arvore
select distinct a1.ancestral, a2.descendente
from arvore a1, arvore a2
where a2.ancestral = a1.descendente
and not exists
(select * from arvore aa
where aa.ancestral = a1.ancestral
and aa.descendente = a2.descendente)Para incluir todas as relações de descendência possíveis de deduzir dos dados originais, Rafael teve que executar esse comando, pelo menos: