Paternità

Il problema

Schema relazionale

  • Paternità(cognome_padre, nome_padre, cognome_figlio, nome_figlio)
  • Maternità(cognome_madre, nome_madre, cognome_figlio, nome_figlio)

Query

  1. Tutte le coppie figlio-genitore
    SELECT nome_figlio, cognome_figlio, nome_madre, cognome_madre
    FROM   Maternità
    UNION
    SELECT nome_figlio, cognome_figlio, nome_padre, cognome_padre
    FROM   Paternità
  2. Le coppie figlio-genitore con etichette appropriate
    SELECT nome_figlio AS Nome, cognome_figlio AS Cognome,
           nome_madre AS [Nome genitore], cognome_madre AS [Cognome genitore]
    FROM   Maternità
    UNION
    SELECT nome_figlio, cognome_figlio, nome_padre, cognome_padre
    FROM   Paternità
  3. I figli (senza ripetizioni)
    SELECT nome_figlio, cognome_figlio
    FROM   Maternità
    UNION
    SELECT nome_figlio, cognome_figlio
    FROM   Paternità
  4. I cognomi di tutti, ordinat
    SELECT   cognome_padre AS COGNOME
    FROM     Paternità
    UNION
    SELECT   cognome_figlio
    FROM     Paternità
    UNION
    SELECT   cognome_madre
    FROM     Maternità
    UNION
    SELECT   cognome_figlio
    FROM     Maternità
    ORDER BY COGNOME
  5. I genitori con numero di figli
    SELECT   cognome_madre AS [Cognome genitore], nome_madre AS [Nome genitore],
             Count(*) AS [Numero figli]
    FROM     Maternità
    GROUP BY cognome_madre, nome_madre
    UNION
    SELECT   cognome_padre, nome_padre,
             Count(*)
    FROM     Paternità
    GROUP BY cognome_padre, nome_padre
  6. I genitori con numero di figli, ordinati per cognome e nome
    SELECT   cognome_madre AS [Cognome genitore], nome_madre AS [Nome genitore],
             Count(*) AS [Numero figli]
    FROM     Maternità
    GROUP BY cognome_madre, nome_madre
    UNION
    SELECT   cognome_padre, nome_padre,
             Count(*)
    FROM     Paternità
    GROUP BY cognome_padre, nome_padre
    ORDER BY [Cognome genitore], [Nome genitore]
  7. I genitori con almeno 2 figli
    SELECT   cognome_madre AS [Cognome genitore], nome_madre AS [Nome genitore],
             Count(*) AS [Numero figli]
    FROM     Maternità
    GROUP BY cognome_madre, nome_madre
    HAVING   Count(*) > 1
    UNION
    SELECT   cognome_padre, nome_padre,
             Count(*)
    FROM     Paternità
    GROUP BY cognome_padre, nome_padre
    HAVING   Count(*) > 1
  8. I padri con più figli della signora xyz …
    SELECT   cognome_padre, nome_padre,
             Count(*) AS [Numero figli]
    FROM     Paternità
    GROUP BY cognome_padre, nome_padre
    HAVING   Count(*) > (SELECT Count(*)
                         FROM Maternità
                         WHERE cognome_madre = [Cognome madre?] AND nome_madre = [Nome madre?])
  9. La nonna paterna di…
    SELECT cognome_madre AS [Cognome nonna paterna], nome_madre AS [Nome nonna paterna]
    FROM   Maternità
    WHERE  cognome_figlio = (SELECT cognome_padre
                             FROM   Paternità
                             WHERE  cognome_figlio = "Cognome" AND nome_figlio = "Nome") AND
           nome_figlio    = (SELECT nome_padre
                             FROM   Paternità
                             WHERE  cognome_figlio = "Cognome" AND nome_figlio = "Nome")