Valutazioni

Verifica del 9-4-2013.

Un insegnante ha raccolto i dati sulle valutazioni dei suoi studenti nella seguente tabella

Cognome Nome Città DataNascita Voto DataVoto TipoVoto
Newton Isaac Feltre 10/03/95 9 12/03/13 Scritto
Planck Max Belluno 12/05/96 10 01/02/13 Orale
Galilei Galileo Belluno 29/10/96 8.5 12/01/13 Pratico
Planck Max Belluno 12/05/96 7 12/03/13 Scritto
Galilei Galileo Belluno 29/10/96 10 Orale
Newton Isaac Feltre 10/03/95 9 12/04/13 Pratico
Newton Isaac Feltre 10/03/95 6.5 19/01/13 Scritto

Interroga il database per ottenere le seguenti informazioni (QUERY + RISULTATO)

  1. Gli studenti che hanno avuto qualche valutazione sufficiente ma inferiore a 8.
  2. La classifica delle città per numero di studenti.
  3. Gli studenti con la lettera K nel proprio nome o cognome.
  4. Elenco ordinato delle valutazioni.
  5. Quali valutazioni mancano della data?
  6. Gli studenti dal più giovane al più vecchio.
  7. Gli studenti che non abitano a Feltre.
  8. Il voto minimo, medio e massimo per ogni tipo di prova.
  9. Elenco delle città di provenienza degli studenti.
  10. Le valutazioni di un certo studente nel mese di gennaio.

Osserva

  1. La relazione VALUTAZIONI non è in forma normale.
    Le ripetizioni dei dati obbligano a usare frequentemente DISTINCT
  2. La complessità delle query non dipende dall’ordine di apparizione
  3. La query n. 2 è particolarmente difficile…


  1. Gli studenti che hanno avuto qualche valutazione sufficiente ma inferiore a 8.
    SELECT Cognome, Nome, Voto
    FROM   valutazioni
    WHERE  `Voto` BETWEEN 6 AND 8

    Il valore 8 è compreso?

    SELECT Cognome, Nome, Voto
    FROM   valutazioni
    WHERE  (Voto >= 6) AND (Voto < 8)

    Ogni studente compare una sola volta?

    SELECT DISTINCT Cognome, Nome
    FROM   valutazioni
    WHERE  (Voto >= 6) AND (Voto < 8)
  2. La classifica delle città per numero di studenti.
    La classifica delle città per numero di valutazioni...

    SELECT   Città, Count(*) AS numero
    FROM     valutazioni
    GROUP BY Città
    ORDER BY numero DESC

    La classifica delle città per numero di studenti...

    SELECT   Città, Count(DISTINCT Cognome, Nome, DataNascita) AS numero
    FROM     valutazioni
    GROUP BY Città
    ORDER BY numero DESC

    SUBQUERY...

    SELECT   Città, Count(*) AS numero
    FROM     (SELECT DISTINCT Cognome, Nome, DataNascita, Città
              FROM valutazioni) AS V2
    GROUP BY Città
    ORDER BY numero DESC
  3. Gli studenti con la lettera K nel proprio nome o cognome.
    SELECT DISTINCT Cognome, Nome, Città, DataNascita
    FROM   valutazioni
    WHERE  (Cognome LIKE '*K*') OR (Nome LIKE '*K*')
  4. Elenco ordinato delle valutazioni.
    Per data?

    SELECT *
    FROM valutazioni
    ORDER BY DataVoto

    Più interrogazioni nello stesso giorno?

    SELECT *
    FROM valutazioni
    ORDER BY DataVoto,Cognome,Nome

    In primo piano le eccellenze?

    SELECT *
    FROM valutazioni
    ORDER BY Voto DESC
  5. Quali valutazioni mancano della data?
    SELECT *
    FROM   valutazioni
    WHERE  DataVoto IS NULL
  6. Gli studenti dal più giovane al più vecchio.
    Gli studenti dal più vecchio al più giovane...

    SELECT   DISTINCT Cognome, Nome, Città, DataNascita
    FROM     valutazioni
    ORDER BY DataNascita

    Gli studenti dal più giovane al più vecchio.

    SELECT   DISTINCT Cognome, Nome, Città, DataNascita
    FROM     valutazioni
    ORDER BY DataNascita DESC
  7. Gli studenti che non abitano a Feltre.
    SELECT DISTINCT Cognome, Nome, Città
    FROM   valutazioni
    WHERE  Città <> 'Feltre'
    ...
    WHERE Città != 'Feltre'
    ...
    WHERE Città NOT LIKE 'Feltre'
  8. Il voto minimo, medio e massimo per tipo di prova.
    SELECT   TipoVoto, Min(Voto) AS Minimo, Avg(Voto) AS Media, Max(Voto) AS Massimo
    FROM     valutazioni
    GROUP BY TipoVoto
  9. Elenco delle città di provenienza degli studenti.
    SELECT   DISTINCT Città
    FROM     valutazioni
    ORDER BY Città
  10. Le valutazioni di un certo studente nel mese di gennaio.
    SELECT *
    FROM   valutazioni
    WHERE  (Cognome = 'Galilei') AND (Nome = 'Galileo') AND
           (DataVoto BETWEEN  #01/01/2013# AND #31/01/2013#)
    SELECT *
    FROM   valutazioni
    WHERE  (Cognome = [Cognome?]) AND
           (Nome    = [Nome?]   ) AND
           (DataVoto BETWEEN  #01/01/2013# AND #31/01/2013#)
    SELECT *
    FROM   valutazioni
    WHERE  (Cognome = 'Galilei') AND
           (DataVoto BETWEEN  '2013-01-01' AND  '2013-01-31')
    SELECT *
    FROM   valutazioni
    WHERE  /*Cognome='[VARIABLE]'*/ AND
           (DataVoto BETWEEN  '2013-01-01' AND  '2013-01-31')