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)
- Gli studenti che hanno avuto qualche valutazione sufficiente ma inferiore a 8.
- La classifica delle città per numero di studenti.
- Gli studenti con la lettera K nel proprio nome o cognome.
- Elenco ordinato delle valutazioni.
- Quali valutazioni mancano della data?
- Gli studenti dal più giovane al più vecchio.
- Gli studenti che non abitano a Feltre.
- Il voto minimo, medio e massimo per ogni tipo di prova.
- Elenco delle città di provenienza degli studenti.
- Le valutazioni di un certo studente nel mese di gennaio.
Osserva
- La relazione VALUTAZIONI non è in forma normale.
Le ripetizioni dei dati obbligano a usare frequentemente DISTINCT - La complessità delle query non dipende dall’ordine di apparizione
- La query n. 2 è particolarmente difficile…
- 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)
- 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
- 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*')
- 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
- Quali valutazioni mancano della data?
SELECT * FROM valutazioni WHERE DataVoto IS NULL
- 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
- 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'
- 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
- Elenco delle città di provenienza degli studenti.
SELECT DISTINCT Città FROM valutazioni ORDER BY Città
- 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')