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.
123SELECT Cognome, Nome, VotoFROM valutazioniWHERE `Voto` BETWEEN 6 AND 8
Il valore 8 è compreso?
123SELECT Cognome, Nome, VotoFROM valutazioniWHERE (Voto >= 6) AND (Voto < 8)
Ogni studente compare una sola volta?
123SELECT DISTINCT Cognome, NomeFROM valutazioniWHERE (Voto >= 6) AND (Voto < 8) - La classifica delle città per numero di studenti.
La classifica delle città per numero di valutazioni…
1234SELECT Città, Count(*) AS numeroFROM valutazioniGROUP BY CittàORDER BY numero DESC
La classifica delle città per numero di studenti…
1234SELECT Città, Count(DISTINCT Cognome, Nome, DataNascita) AS numeroFROM valutazioniGROUP BY CittàORDER BY numero DESC
SUBQUERY…
12345SELECT Città, Count(*) AS numeroFROM (SELECT DISTINCT Cognome, Nome, DataNascita, CittàFROM valutazioni) AS V2GROUP BY CittàORDER BY numero DESC - Gli studenti con la lettera K nel proprio nome o cognome.
123SELECT DISTINCT Cognome, Nome, Città, DataNascitaFROM valutazioniWHERE (Cognome LIKE '*K*') OR (Nome LIKE '*K*') - Elenco ordinato delle valutazioni.
Per data?
123SELECT *FROM valutazioniORDER BY DataVoto
Più interrogazioni nello stesso giorno?
123SELECT *FROM valutazioniORDER BY DataVoto,Cognome,Nome
In primo piano le eccellenze?
123SELECT *FROM valutazioniORDER BY Voto DESC - Quali valutazioni mancano della data?
123SELECT *FROM valutazioniWHERE DataVoto IS NULL - Gli studenti dal più giovane al più vecchio.
Gli studenti dal più vecchio al più giovane…
123SELECT DISTINCT Cognome, Nome, Città, DataNascitaFROM valutazioniORDER BY DataNascita
Gli studenti dal più giovane al più vecchio.
123SELECT DISTINCT Cognome, Nome, Città, DataNascitaFROM valutazioniORDER BY DataNascita DESC - Gli studenti che non abitano a Feltre.
123SELECT DISTINCT Cognome, Nome, CittàFROM valutazioniWHERE Città <> 'Feltre'
12...WHERE Città != 'Feltre'
12...WHERE Città NOT LIKE 'Feltre' - Il voto minimo, medio e massimo per tipo di prova.
123SELECT TipoVoto, Min(Voto) AS Minimo, Avg(Voto) AS Media, Max(Voto) AS MassimoFROM valutazioniGROUP BY TipoVoto - Elenco delle città di provenienza degli studenti.
123SELECT DISTINCT CittàFROM valutazioniORDER BY Città - Le valutazioni di un certo studente nel mese di gennaio.
1234SELECT *FROM valutazioniWHERE (Cognome = 'Galilei') AND (Nome = 'Galileo') AND(DataVoto BETWEEN #01/01/2013# AND #31/01/2013#)
12345SELECT *FROM valutazioniWHERE (Cognome = [Cognome?]) AND(Nome = [Nome?] ) AND(DataVoto BETWEEN #01/01/2013# AND #31/01/2013#)
1234SELECT *FROM valutazioniWHERE (Cognome = 'Galilei') AND(DataVoto BETWEEN '2013-01-01' AND '2013-01-31')
1234SELECT *FROM valutazioniWHERE /*Cognome='[VARIABLE]'*/ AND(DataVoto BETWEEN '2013-01-01' AND '2013-01-31')