|
MC 536 - "Exercícios sobre a tabela Pais-e-Filhos"
Prof. Célio Guimarães IC - Unicamp
|
|
Atualizado em 28 Set 2022
Seja D uma tabela com esquema D(p,f) representando um relacionamento
entre pessoas da seguinte forma: uma linha (p,q) de uma instância da tabela D significa
que a pessoa p possui como filho (ou filha) a pessoa q.
Vamos impor a seguinte regra de consistência para a tabela D:
se existe uma linha (p,q) em D, necessariamente há outra linha (m,q) (m # p), representando os pais
da pessoa q (sem especificar o sexo), ou seja, para cada pessoa presente na tabela D, ou existe
informação sobre ambos os pais ou nenhuma informação sobre os mesmos.
No esquema dado veja p como mnemônico para pai/mãe e f como mnemonico para filho/a
(sem especificar o sexo)
Escreva comandos SQL para cada consulta a seguir:
(eliminando repetições, onde apropriado). Você pode, opcionalmente,
usar order bypara melhor visualizar o resultado.
- Dê uma lista de pessoas cujos pais estão presentes em D.
- Dê uma lista de pessoas cujos pais não estão presentes em D.
- Dê uma lista de pessoas que nâo têm filhos.
- Dê uma lista de pessoas que são avós.
- * Dê uma lista de pares de pessoas (sem repetição) que são pais de um ou mais filhos.
- * Dê uma lista de pares de pessoas (sem repetição) que são irmãos ou meio-irmãos.
- * Dê uma lista de triplas de pessoas (p1, p2, f) onde p1 e p2 são pais de f.
- * Dê uma lista de triplas de pessoas (a1, a2, n) onde a1 e a2 são avós de n.
- ** Dê uma lista de pares de pessoas (t,s) em que t é diretamente tio de s,
ou seja, s é filho de um irmão de t.
- ** Dê uma lista de pares de pessoas que são primos em primeiro grau
- ** Dê uma lista de pares de pessoas que são irmãos de pai e mãe (isto é, não são meio-irmãos)
Sugestões:
(i) Use o diagrama árvore genealógica
que representa a instância da tabela D
para verificar a correção das suas soluções.
(ii) As consultas marcadas com "**" são extensões de consultas anteriores.
Por exemplo: sobrinhos são filhos de irmãos ou meio-irmãos (consulta f)"
Analogamente, "primos são filhos de irmãos ou meio-irmãos (consulta f)"
Solução de e:
select d1.p, d2.p
from D d1, D d2
where d1.f = d2.f and d1.p < d2.p -- "<" em vez de "<>" para eliminar repetições