Valutazioni degli studenti

Il problema

Schema relazionale

Rel_valutazioni

  • STUDENTI(IDstudente, Cognome, Nome, Città, DataNascita, NumDebiti)
  • VALUTAZIONI(IDvalutazione, Voto, Data, studenteID, provaID)
  • PROVE(IDprova, Tipo, Peso)

VALUTAZIONI.provaID è chiave esterna collegata a PROVE.IDprova
VALUTAZIONI.studenteID è chiave esterna collegata a STUDENTI.IDstudente

Query

  1. Le città di provenienza degli studenti
    SELECT   DISTINCT Città
    FROM     STUDENTI
    ORDER BY Città
  2. Gli studenti che non hanno ancora comunicato la data di nascita
    SELECT *
    FROM   STUDENTI
    WHERE  DataNascita IS NULL
  3. Gli studenti di Feltre che hanno un cognome simile a “rosa”
    SELECT *
    FROM   STUDENTI
    WHERE  (Citta = "Feltre") AND (Cognome LIKE "*rosa*")
  4. Gli studenti con il cognome e nome uguale a qualche altro studente
    SELECT S1.*
    FROM   STUDENTI AS S1, STUDENTI AS S2
    WHERE  (S1.Cognome = S2.Cognome) AND (S1.Nome = S2.Nome) AND (S1.IDstudente <> S2.Studente)
  5. Le coppie di studenti con il cognome e nome uguale a qualche altro studente
    SELECT S1.*, S2.*
    FROM   STUDENTI AS S1, STUDENTI AS S2
    WHERE  (S1.Cognome = S2.Cognome) AND (S1.Nome = S2.Nome) AND (S1.IDstudente < S2.IDStudente)
  6. Gli studenti con almeno un voto superiore all'otto conseguito nell'anno corrente
    SELECT DISTINCT IDstudente, Cognome, Nome
    FROM   STUDENTI INNER JOIN VALUTAZIONI
    WHERE  (VALUTAZIONI.Voto > 8) AND (VALUTAZIONI.DATA = Year(Now()))
  7. Quanti studenti
    SELECT Count(*) AS [Numero studenti]
    FROM   STUDENTI

    Quanti debiti

    SELECT Sum(NumDebiti) AS [Numero debiti]
    FROM   STUDENTI
  8. Quanti studenti di una certa città
    SELECT Count(*) AS [Numero studenti]
    FROM   STUDENTI
    WHERE  Città = [Quale città?]
  9. Quanti debiti degli studenti di Feltre, Pedavena e Alano
    SELECT Sum(NumDebiti) AS [Numero di debiti]
    FROM   STUDENTI
    WHERE  Città IN ("Alano", "Feltre", "Pedavena")
  10. Quanti studenti con un certo anno di nascita
    SELECT Count(*) AS [Numero studenti]
    FROM   STUDENTI
    WHERE  Year(DataNascita) = [Anno di nascita?]
  11. La situazione di un certo studente
    SELECT Count(*)  AS [Numero valutazioni], Min(Voto) AS [Voto minimo],
           Avg(Voto) AS [Voto medio]        , Max(Voto) AS [Voto massimo]
    FROM   STUDENTI INNER JOIN VALUTAZIONI ON STUDENTI.IDstudente = VALUTAZIONI.studenteID
    WHERE  IDstudente = [Codice studente?]
  12. Quanti studenti per ogni città di provenienza
    SELECT   Città, Count(*) AS [Numero studenti]
    FROM     STUDENTI
    GROUP BY Città
    ORDER BY Città
  13. Quanti debiti per ogni città di provenienza
    SELECT   Città, Sum(NumDebiti) AS [Numero debiti]
    FROM     STUDENTI
    GROUP BY Città
    ORDER BY Città
  14. Classifica delle città per numero di studenti
    SELECT   Città, Count(*) AS [Numero studenti]
    FROM     STUDENTI
    GROUP BY Città
    ORDER BY Count(*) DESC
  15. Quanti studenti per anno di nascita
    SELECT   Year(DataNascita) AS [Anno di nascita], Count(*) AS [Numero studenti]
    FROM     STUDENTI
    GROUP BY Year(DataNascita)
    ORDER BY Year(DataNascita)
  16. Voto medio per le diverse tipologie di prova
    SELECT   Tipo AS [Tipologia], Avg(Voto) AS [Voto medio]
    FROM     VALUTAZIONI
    GROUP BY Tipo
  17. La situazione degli studenti
    SELECT   IDstudente AS [Matricola], Cognome, Nome,
             Count(*)  AS [Numero valutazioni], Min(Voto) AS [Voto minimo],
             Avg(Voto) AS [Voto medio]        , Max(Voto) AS [Voto massimo]
    FROM     STUDENTI INNER JOIN VALUTAZIONI ON STUDENTI.IDstudente = VALUTAZIONI.studenteID
    GROUP BY IDstudente, Cognome, Nome;
    ORDER BY Cognome, Nome
  18. Quante prove scritte ha fatto ogni studente
    SELECT   IDstudente, Cognome, Nome, Count(*) AS [Numero scritti]
    FROM     (STUDENTI INNER JOIN VALUTAZIONI ON STUDENTI.IDstudente = VALUTAZIONI.studenteID)
              INNER JOIN PROVA ON VALUTAZIONI.provaID = PROVE.IDprova
    WHERE    Tipo = "scritto"
    GROUP BY IDstudente, Cognome, Nome
    ORDER BY Cognome, Nome
  19. Gli studenti con almeno due voti superiori all'otto conseguiti nell'anno corrente
    SELECT   IDstudente, Cognome, Nome
    FROM     STUDENTI INNER JOIN VALUTAZIONI
    WHERE    (VALUTAZIONI.Voto > 8) AND (VALUTAZIONI.DATA = Year(Now()))
    GROUP BY IDstudente, Cognome, Nome
    HAVING   Count(*) >= 2
    ORDER BY Cognome, Nome