1. ESERCITAZIONI: Algebra relazionale e QUERY E’ dato il seguente diagramma E/R di esempio: Cognome Nome Classe Sezione Specializzazione CodClasse 1 Classe HaInsegnante Cap Frequenta Citta N E’Frequentata Frequenta Studente 1 Riceve Riceve Insegna Insegna N E’Ricevuta CodProf CodVal Professore Cap Indirizzo Matricola N NumOre DataNascita N Valutazione ClasseConcorso Citta Nome Indirizzo Cognome DataNascita Materia DataVal Voto Si ricava il seguente SCHEMA RELAZIONALE (MAPPING DEL DIAGRAMMA ER) Classe (CodClasse, Classe, Sezione, Specializzazione) Studente (Matricola, Cognome, Nome, DataNascita, Indirizzo, Cap, Citta, Email, CodClasse1) Con l’attributo “CodClasse1” FK sulll’attributo “CodClasse” della relazione “Classe” VRCodClasse1 (Studente) VRCodClasse (Classe) deriva dalla TOTALITA’ della associazione diretta “Frequenta” VRCodClasse (Classe) VRCodClasse1 (Studente) deriva dalla TOTALITA’ della associazione inversa “E’Frequentata” Valutazione (CodVal, DataVal, Voto, Materia, Matricola1) Con l’attributo “Matricola1” FK sull’attributo “Matricola” della relazione “Studente” VRMatricola1 (Valutazione) VRMatricola (Studente) deriva dalla TOTALITA’ della associazione inversa “E’ricevuta” Professore (CodProf, Cognome, Nome, Data Nascita, Indirizzo, Cap, Citta, ClasseConcorso) Insegna (CodProf2, CodClasse2, NumOre) Con l’attributo “CodProf2” FK sull’attributo “CodProf” della relazione “Professore” Con l’attributo “CodClasse2” FK sull’attributo “CodClasse” della relazione “Classe” VRCodProf2 (Insegna) VRCodProf (Professore) deriva dal mapping dell’associazione di molt. N:N “Insegna” VRCodClasse2 (Insegna) VRCodClasse (Classe) deriva dal mapping dell’associazione di molt. N:N “Insegna” VRCodProf (Professore) VRCodProf2 (Insegna) deriva dalla TOTALITA’ della associazione diretta “Insegna” VRCodClasse (Classe) VRCodClasse2 (Insegna) deriva dalla TOTALITA’ della associazione inversa “E’Insegnata” Email TESTO DELLE QUERY Risolvere le seguenti interrogazioni utilizzando, se possibile, l’algebra relazionale e tradurle in SQL: GLI OPERATORI ALGEBRICI IN SQL Q1. Elencare tutte le valutazioni con voto sufficiente Q2. Elencare tutte le valutazioni in “Italiano” con voto sufficiente Q3. Elencare tutte le valutazioni in una materia fornita in ingresso dall’utente Q4. Elencare tutte le classi, con la relativa specializzazione, presenti in istituto Q5. Elencare tutte le specializzazioni presenti in istituto Q6. Elencare gli studenti dell’istituto con le rispettive valutazioni Q7. Elencare gli studenti del’istituto con le rispettive classi Q8. Elencare i nominativi degli studenti dell’istituto con le rispettive classi Q9. Elencare i nominativi degli studenti dell’istituto che hanno valutazioni in “Informatica” Q10. Elencare i professori dell’istituto con le rispettive classi in cui insegnano Q11. Salvare in una nuova tabella ProfessoriInsegnanoClassi i nominativi dei professori dell’istituto con le rispettive classi in cui insegnano Q12. Utilizzando la nuova tabella creata al punto precedente, elencare i nominativi dei professori che insegnano nelle classi di una specializzazione fornita in ingresso dall’utente Q13. Elencare i nominativi degli studenti dell’istituto, con le rispettive classi, che frequentano una specializzazione fornita in ingresso Q14. Elencare le coppie di studenti con matricola diversa che vengono dalla stessa città Q15. Elencare le valutazioni degli studenti dell’istituto Q16. Elencare i professori dell’istituto della specializzazione “INFORMATICA” con le rispettive classi Q17. Elencare gli studenti dell’istituto con le rispettive valutazioni, considerando anche quelli al momento senza alcun voto OPERATORI INSIEMISTICI IN SQL Q18. Elencare i nomi di tutti i docenti che insegnano nelle terze o nelle quarte Q19. Elencare i nomi di tutti i docenti che insegnano sia nelle terze sia nelle quarte Q20. Elencare i nominativi dei docenti che non provengono da Napoli Q21. Elencare le matricole, cognome “ELETTRONICA” sia in “INFORMATICA” e nome degli studenti con valutazioni Q22. Elencare le matricole degli studenti che non hanno al momento valutazioni sia in OPERATORI DI AGGIORNAMENTO IN SQL INSERT Q23. Inserire il nuovo professore con i seguenti “01/01/1970”, “Via Rodi, 5”, “80100”, “Napoli”, “A033” dati “P-05”,”Magnino”, “Paolo”, Q24. Inserire il nuovo professore del quali si conoscono solo i seguenti dati “P-05”,”Magnino”, “Paolo”, “01/01/1970” (evidentemente tutti gli altri sono attributi OPZIONALI) Q25. Accodare alla tabella Professore la tabella Supplente dallo stesso formato contenente l’elenco dei supplenti dell’istituto UPDATE Q26. Aggiornare la tabella Classe modificando in “MECCATRONICA” la specializzazione precedentemente indicata “MECCANICA” Q27. Aggiornare la tabella Valutazione modificando il nome della materia “TECNOLOGIA” in “TECNICA” Q28. Aggiornare la tabella delle Valutazioni incrementando di una unità i voti insufficienti nelle valutazioni in “INFORMATICA” DELETE Q29. Cancellare dalla tabella Valutazioni le valutazioni insufficienti Q30. Cancellare tutti i professori presenti in istituto ALTRE CARATTERISTICHE DELLA SELECT Q31. Visualizzare le valutazioni riguardanti le materie “INFORMATICA” ed “ELETTRONICA” Q32. Visualizzare le valutazioni specializzazione “INFORMATICA” insufficienti nelle materie non di indirizzo della Q33. Visualizzare le materie alle cui valutazioni corrispondono voti tra il 6 ed 8 (estremi compresi) Q34. Visualizzare le valutazioni del mese di dicembre 2009 Q35. Visualizzare le valutazioni nelle materie di laboratorio Q36. Visualizzare gli studenti il cui cognome inizia per “V” Q37. Visualizzare gli studenti la cui matricola inizia con “M” ed il cui terzo carattere è un numero (totale 4 caratteri) e la cui città inizia con “RO” Q38. Visualizzare i nominativi e gli indirizzi degli studenti che hanno un indirizzo email ORDINARE I DATI Q39. Ordinare alfabeticamente le righe della tabella professori in base agli attributi Cognome e Nome Q40. Elencare le valutazioni in “INFORMATICA” in ordine di voto decrescente LE FUNZIONI DI AGGREGAZIONE FUNZIONE SUM Q41. Calcolare il numero totale di ore di insegnamento del professore con codice “P-01” FUNZIONE AVG Q42. Calcolare la media dei voti dello studente con matricola “M-01” FUNZIONE MAX E MIN Q43. Ricercare il voto minimo ed il voto massimo assegnato durante una valutazione di “INFORMATICA” Q44. Ricercare il primo cognome tra gli studenti FUNZIONE COUNT Q45. Determinare il numero complessivo di professori dell’istituto Q46. Determinare il numero di valutazioni sufficienti Q47. Determinare “INFORMATICA” il numero di classi dell’istituto appartenenti alla specializzazione Q48. Determinare il numero di specializzazioni presenti in istituto RAGGRUPPAMENTI Q49. Per ogni diversa materia determinare il numero di valutazioni effettuate, visualizzando l’elenco delle materie in ordine alfabetico crescente con il corrispondente valore calcolato Q50. Per ogni diversa materia calcolare la media dei voti delle valutazioni effettuate, visualizzando in ordine decrescente di media, l’elenco delle materie con il corrispondente valore della media calcolato Q51. Calcolare per ogni professore il numero totale di ore di insegnamento visualizzando poi l’elenco dei nominativi dei professori con i corrispondenti valori calcolati in ordine decrescente di nominativo Q52. Calcolare per ogni studente la media dei voti riportati nelle valutazioni di “INFORMATICA” visualizzando in ordine decrescente di media l’elenco dei nominativi degli studenti ed i corrispettivi valori calcolati Q53. Per ogni diversa materia determinare il numero di valutazioni effettuate visualizzando l’elenco delle materie alle quali corrisponde più di una valutazione Q54. Per ogni diversa materia determinare la media dei voti delle valutazioni effettuate, visualizzando in ordine decrescente di media, l’elenco delle materie in cui il valore della media restituito è compreso tra 5 e 6 (estremi compresi) Q55. Visualizzare, in ordine alfabetico, i nominativi degli studenti con la media dei voti in “INFORMATICA” che non superi il 6 QUERY NIDIFICATE Q56. Visualizzare i nominativi degli studenti che hanno conseguito in “INFORMATICA” il voto massimo assegnato in questa materia Q57. Visualizzare, in ordine alfabetico, i nominativi dei professori che hanno un numero totale di insegnamento superiore a quelle del professore con codice “P-03” Q58. Visualizzare i nominativi degli studenti che frequentano classi con più di 1 allievo Q59. Visualizzare, in ordine alfabetico, i nominativi dei professori che non insegnano nella “3H” “INFORMATICA” Q60. Visualizzare i codici dei professori che insegnano nella “3h” e nella “4H” “INFORMATICA” Q61. Visualizzare i nominativi degli studenti della “3H” “INFORMATICA” che hanno preso voti in “INFORMATICA” superiori ad almeno uno dei voti di “INFORMATICA” degli studenti della “4H” “INFORMATICA” Q62. Visualizzare i nominativi della “3H” “INFORMATICA” che hanno preso voti di “INFORMATICA” superiori a tutti i voti di “INFORMATICA” degli studenti della “4H” “INFORMATICA” Q63. Visualizzare la media degli studenti di “INFORMATICA” solo se esistono studenti iscritti a questa specializzazione SOLUZIONI Q1. Elencare tutte le valutazioni con voto sufficiente SQL SELECT * FROM Valutazione WHERE (Voto >= 6); Algebra relazionale Voto >= 6 (Valutazione) Q2. Elencare tutte le valutazioni in “Informatica” con voto sufficiente SQL SELECT * FROM Valutazione WHERE (Materia = “Informatica”) AND (Voto >= 6); Algebra relazionale (Materia = “Informatica”) AND (Voto >= 6) (Valutazione) Q3. Elencare tutte le valutazioni in una materia fornita in ingresso dall’utente SQL SELECT * FROM Valutazione WHERE Materia = [MateriaX]; Algebra relazionale Materia = [MateriaX] (Valutazione) Q4. Elencare tutte le classi, con la relativa specializzazione, presenti in istituto SQL SELECT Classe, Sezione, Specializzazione FROM Classe; Algebra relazionale Classe, Sezione, Specializzazione (Classe) Q5. Elencare tutte le specializzazioni presenti in istituto SQL SELECT DISTINCT Specializzazione FROM Classe; Algebra relazionale Specializzazione (Classe) Q6. Elencare gli studenti dell’istituto con le rispettive valutazioni SQL SELECT * FROM Studente, Valutazione WHERE Studente.Matricola=Valutazione.Matricola1; Algebra relazionale (Studente Valutazione) Matricola=Matricola1 Q7. Elencare gli studenti del’istituto con le rispettive classi SQL SELECT * FROM Studente, Classe WHERE Studente.CodClasse1 = Classe.CodClasse; Algebra relazionale (Studente Classe) CodClasse1 = CodClasse Q8. Elencare i nominativi degli studenti dell’istituto con le rispettive classi SQL SELECT Cognome, Nome, Classe, Sezione, Specializzazione FROM Studente, Classe WHERE Studente.CodClasse1 = Classe.CodClasse; Algebra relazionale Cognome,Nome, Classe, Sezione, Specializzazione (Studente Classe) CodClasse1 = CodClasse Q9. Elencare i nominativi degli studenti dell’istituto che hanno valutazioni in “Informatica” SQL SELECT DISTINCT Studente.Cognome, Studente.Nome FROM Studente, Valutazione WHERE (Studente.Matricola=Valutazione.Matricola1) AND (Materia = “INFORMATICA”); Algebra relazionale Cognome,Nome (Materia = “INFORMATICA” (Studente Valutazione) ) Matricola=Matricola1 SELECT DISTINCT Studente.Cognome, Studente.Nome FROM Studente, (SELECT * FROM Valutazione WHERE (Materia = “INFORMATICA”) AS t1) WHERE (Studente.Matricola=t1.Matricola1); Algebra relazionale Cognome,Nome ( (Studente Materia = “INFORMATICA” (Valutazione) ) Matricola=Matricola1 Q10. Elencare i professori dell’istituto con le rispettive classi in cui insegnano SQL SELECT Cognome, Nome, Classe, Sezione, Specializzazione FROM Professore, Insegna, Classe WHERE (Professore. CodProf=Insegna.CodProf2) AND (Insegna.CodClasse2=Classe.CodClasse); Algebra relazionale A = Cognome, Nome, Classe, Sezione, Specializzazione A (Professore (Insegna Classe) ) CodProf=CodProf2 CodClasse2= CodClasse) Q11. Salvare in una nuova tabella ProfessoriInsegnanoClassi i nominativi dei professori dell’istituto con le rispettive classi in cui insegnano SQL SELECT Cognome, Nome, Classe, sezione, Specializzazione INTO ProfessoriInsegnanoClassi FROM Professore, Insegna, Classe WHERE (Professore. CodProf=Insegna.CodProf2) AND (Insegna.CodClasse2=Classe.CodClasse); Algebra relazionale Vedi sopra Q12. utilizzando la nuova tabella creata al punto precedente, elencare i nominativi dei professori che insegnano nelle classi di una specializzazione fornita in ingresso dall’utente SQL SELECT DISTINCT Cognome, Nome FROM ProfessoriInsegnanoClassi WHERE Specializzazione = [SpecializzazioneX]; Algebra relazionale Cognome, Nome (Specializzazione = [SpecializzazioneX] (ProfessoriInsegnanoClassi) ) Q13. Elencare i nominativi degli studenti dell’istituto, con le frequentano una specializzazione fornita in ingresso rispettive classi, che SQL SELECT Cognome, Nome, Classe, Sezione FROM Studente, Classe WHERE (Studente.CodClasse1 = Classe.CodClasse) AND (Specializzazione = [SpecializzazioneX]); Algebra relazionale Cognome,Nome, Classe, Sezione(Specializzazione = [SpecializzazioneX] (Studente Classe) CodClasse1 = CodClasse SELECT Cognome, Nome, Classe, Sezione FROM Studente, (SELECT * FROM Classe WHERE (Specializzazione = [SpecializzazioneX])) AS t1 WHERE (Studente.CodClasse1 = t1.CodClasse); Algebra relazionale Cognome,Nome, Classe, Sezione (Studente Specializzazione = [SpecializzazioneX] (Classe) ) CodClasse1 = CodClasse Q14. Elencare le coppie di studenti con matricola diversa che vengono dalla stessa città SQL SELECT t1.Cognome, t1.Nome, t2.Cognome, t2.Nome FROM Studente AS t1, Studente AS t2 WHERE (t1.Matricola<>t2.Matricola) And (t1.Citta=t2.Citta); Algebra relazionale t1.Cognome, t1.Nome, t2.Cognome, t2.Nome (t1.Matricola<>t2.Matricola (t1 t2) t1.Citta=t2.Citta Q15. Elencare le valutazioni degli studenti dell’istituto SQL SELECT Cognome, Nome, Materia, Voto FROM Studente, Valutazione WHERE (Studente.Matricola = Valutazione.Matricola1); SELECT Cognome, Nome, Materia, Voto FROM Studente INNER JOIN Valutazione ON Studente.Matricola = Valutazione.Matricola1; Algebra relazionale Cognome,Nome, Materia, Voto (Studente Valutazione) Matricola=Matricola1 Q16. Elencare i professori dell’istituto della specializzazione “INFORMATICA” con le rispettive classi SQL SELECT Cognome, Nome, Classe, Sezione FROM Professore, Insegna, Classe WHERE (Professore. CodProf=Insegna.CodProf2) AND (Insegna.CodClasse2=Classe.CodClasse) AND (Specializzazione = “INFORMATICA”); Algebra relazionale A = Cognome, Nome, Classe, Sezione P = Specializzazione = “INFORMATICA” A (P (Professore (Insegna Classe) ) ) CodProf=CodProf2 CodClasse2= CodClasse) SELECT Cognome, Nome, Classe, Sezione FROM Professore, Insegna, (SELECT * FROM Classe WHERE (Specializzazione = “INFORMATICA”)) AS t1 WHERE (Professore. CodProf=Insegna.CodProf2) AND (Insegna.CodClasse2=t1.CodClasse); Algebra relazionale A (Professore (Insegna CodProf=CodProf2 P (Classe) ) ) CodClasse2= CodClasse) Q17. Elencare gli studenti dell’istituto con le rispettive valutazioni, considerando anche quelli al momento senza alcun voto SQL SELECT Cognome, Nome, Materia, Voto FROM Studente LEFT JOIN Valutazione ON (Studente.Matricola = Valutazione.Matricola1); Algebra relazionale SX Materia, Voto, Cognome, Nome (Studente Valutazione) Matricola=Matricola1 SELECT Materia, Voto, Cognome, Nome FROM Valutazione RIGHT JOIN Studente ON (Valutazione.Matricola1 = Studente.Matricola); Algebra relazionale DX Materia, Voto, Cognome, Nome (Valutazione Studente) Matricola1=Matricola Q18. Elencare i nomi di tutti i docenti che insegnano nelle terze o nelle quarte SQL (SELECT Cognome, Nome FROM Professore, Insegna, Classe WHERE (Professore.CodProf=Insegna.CodProf2) AND (Insegna.CodClasse2=Classe.CodClasse) AND (Classe=”3”) ) UNION (SELECT Cognome, Nome FROM Professore, Insegna, Classe WHERE (Professore.CodProf=Insegna.CodProf2) AND (Insegna.CodClasse2=Classe.CodClasse) AND (Classe=”4”) ); Algebra relazionale A = Cognome, Nome P = Classe=”3” P1 = Classe=”3” ( A (Professore (Insegna P CodProf=CodProf2 (Classe))) CodClasse2= CodClasse) ) ( A (Professore (Insegna CodProf=CodProf2 P1 (Classe))) ) CodClasse2= CodClasse) Q19. Elencare i nomi di tutti i docenti che insegnano sia nelle terze sia nelle quarte SQL (SELECT Cognome, Nome FROM Professore, Insegna, Classe WHERE (Professore.CodProf=Insegna.CodProf2) AND (Insegna.CodClasse2=Classe.CodClasse) AND (Classe=”3”) ) INTERSECT (SELECT Cognome, Nome FROM Professore, Insegna, Classe WHERE (Professore.CodProf=Insegna.CodProf2) AND (Insegna.CodClasse2=Classe.CodClasse) AND (Classe=”4”) ); Algebra relazionale A = Cognome, Nome P = Classe=”3” P1 = Classe=”4” ( A (Professore (Insegna P CodProf=CodProf2 (Classe))) CodClasse2= CodClasse) ) ( A (Professore (Insegna CodProf=CodProf2 P1 (Classe))) ) CodClasse2= CodClasse) SELECT CodProf, Cognome, Nome, Classe FROM Professore, Insegna, Classe WHERE (Professore.CodProf=Insegna.CodProf2) And (Insegna.CodClasse2=Classe.CodClasse) (Classe='3') and CodProf = ANY (oppure SOME) ( SELECT CodProf FROM Professore, Insegna, Classe WHERE (Professore.CodProf=Insegna.CodProf2) And (Insegna.CodClasse2=Classe.CodClasse) And (Classe='4') ); SELECT CodProf, Cognome, Nome, Classe FROM Professore, Insegna, Classe WHERE (Professore.CodProf=Insegna.CodProf2) And (Insegna.CodClasse2=Classe.CodClasse) (Classe='3') and CodProf IN ( SELECT CodProf FROM Professore, Insegna, Classe WHERE (Professore.CodProf=Insegna.CodProf2) And (Insegna.CodClasse2=Classe.CodClasse) And (Classe='4') ); And And Q20. Elencare i nominativi dei docenti che non provengono da Napoli SQL (SELECT Cognome, Nome FROM Professore) MINUS (SELECT Cognome, Nome FROM Professore WHERE (Citta=”NAPOLI”) ); Algebra relazionale A = Cognome, Nome P = Citta=”NAPOLI” ( A (Professore) ) - ( A ( P (Professore )) ) SELECT Cognome, Nome FROM Professore WHERE CodProf <> ALL (SELECT CodProf FROM Professore WHERE (Citta=”NAPOLI”)); SELECT Cognome, Nome FROM Professore WHERE CodProf NOT IN (SELECT CodProf FROM Professore WHERE (Citta=”NAPOLI”)); SELECT Cognome, Nome FROM Professore WHERE CodProf IN (SELECT CodProf FROM Professore WHERE (Citta<>”NAPOLI”)); Q21. Elencare gli studenti (matricola, “ELETTRONICA” sia in “INFORMATICA” cognome e nome) con valutazioni sia SQL (SELECT Matricola, Cognome, Nome FROM Studente, Valutazione WHERE (Studente.Matricola=Valutazione.Matricola1) AND (Materia=”ELETTRONICA”) ) INTERSECT (SELECT Matricola, Cognome, Nome FROM Studente, Valutazione WHERE (Studente.Matricola=Valutazione.Matricola1) AND (Materia=”INFORMATICA”) ); Algebra relazionale A = Matricola, Cognome, Nome P = Materia=”ELETTRONICA” P1 = Materia=”INFORMATICA” (A ( Studente P (Valutazione)) ) (A (Studente P1(Valutazione)) ) Matricola=Matricola1 N.B. Vedi Query 19 per versioni alternative Matricola=Matricola1 in Q22. Elencare le matricole degli studenti che non hanno al momento valutazioni SQL (SELECT Matricola FROM Studente ) MINUS (SELECT Matricola FROM Studente, Valutazione WHERE (Studente.Matricola=Valutazione.Matricola1) ); Algebra relazionale ( Matricola (Studente) ) - ( Matricola (Studente Valutazione) ) Matricola=Matricola1 SELECT Matricola, Cognome, Nome FROM Studente WHERE Matricola <> ALL (SELECT Matricola FROM Studente, Valutazione WHERE (Studente.Matricola=Valutazione.Matricola1)); SELECT Matricola, Cognome, Nome FROM Studente WHERE Matricola NOT IN (SELECT Matricola FROM Studente, Valutazione WHERE (Studente.Matricola=Valutazione.Matricola1)); Q23. Inserire il nuovo professore con i seguenti “01/01/1970”, “Via Rodi, 5”, “80100”, “Napoli”, “A033” dati “P-05”,”Magnino”, “Paolo”, SQL INSERT INTO Professore(CodProf, Cognome, Nome, DataNascita, Indirizzo, Cap, Citta, ClasseConcorso ) VALUES (“P-05”, “Magnino”, “Paolo”, “01/01/1970”, “Via Rodi, 5”, “80100”, “Napoli”, “A033”); INSERT INTO Professore VALUES (“P-05”, “Magnino”, “Paolo”, “01/01/1970”, “Via Rodi, 5”, “80100”, “Napoli”, “A033”); Q24. Inserire il nuovo professore del quali si conoscono solo i seguenti dati obbligatori “P-05”,”Magnino”, “Paolo”, “01/01/1970” (con tutti gli altri attributi OPZIONALI) SQL INSERT INTO Professore ( CodProf, Cognome, Nome, DataNascita ) VALUES (“P-05”, “Magnino”, “Paolo”, “01/01/1970”); Q25. Accodare alla tabella Professore la tabella Supplente dallo stesso formato contenente l’elenco dei supplenti dell’istituto SQL INSERT INTO Professore SELECT * FROM Supplente; Q26. Aggiornare la tabella Classe modificando in “MECCATRONICA” la specializzazione precedentemente indicata “MECCANICA” SQL UPDATE Classe SET Specializzazione = “MECCATRONICA” WHERE Specializzazione = ”MECCANICA”; Q27. Aggiornare la tabella Valutazione modificando il nome della materia “TECNOLOGIA” in “TECNICA” SQL UPDATE Valutazione SET Materia = “TECNICA” WHERE Materia =”TECNOLOGIA”; Q28. Aggiornare la tabella delle Valutazioni incrementando di una unità i voti insufficienti nelle valutazioni in “INFORMATICA” SQL UPDATE Valutazione SET Voto = Voto + 1 WHERE (Materia = ”INFORMATICA”) AND (Voto <= 5); Q29. Cancellare dalla tabella Valutazioni le valutazioni insufficienti SQL DELETE FROM Valutazione WHERE Voto <= 5; Q30. Cancellare tutti i dati della tabella ProfessoriInsegnanoClassi creata con la query Q11 SQL DELETE FROM ProfessoriInsegnanoClassi; Q31. Visualizzare le valutazioni riguardanti le materie “INFORMATICA”, “SISTEMI”, ed “ELETTRONICA” SQL SELECT * FROM Valutazione WHERE (Materia =“INFORMATICA”) OR (Materia =”ELETTRONICA”) OR (Materia =”SISTEMI”); EQUIVALENTE A SELECT * FROM Valutazione WHERE Materia IN (“INFORMATICA”,”ELETTRONICA”,”SISTEMI”); Q32. Visualizzare le valutazioni specializzazione “INFORMATICA” insufficienti nelle materie non di indirizzo della SQL SELECT DataVal, Voto, Materia FROM Valutazione, Studente,Classe WHERE (Valutazione.Matricola1=Studente.Matricola) AND (Studente.CodClasse1=Classe.CodClasse) AND (Specializzazione="INFORMATICA") AND (Voto <= 5) AND (Materia NOT IN (“INFORMATICA”,”ELETTRONICA”,”SISTEMI”); Q33. Visualizzare le materie alle cui valutazioni corrispondono voti tra il 6 ed 8 (estremi compresi) SQL SELECT DISTINCT Materia FROM Valutazione WHERE Voto BETWEEN 8 AND 10; Q34. Visualizzare le valutazioni del mese di dicembre 2009 SQL SELECT * FROM Valutazione WHERE DataVal BETWEEN “01/12/2009” AND “31/12/2009”; // NOTAZIONE STANDARD SELECT * FROM Valutazione WHERE DataVal BETWEEN #01/12/2009# AND #31/12/2009#; // NOTAZIONE ACCESS Q35. Visualizzare le valutazioni nelle materie di laboratorio SQL SELECT * FROM Valutazione WHERE Materia LIKE “LAB*”; Q36. Visualizzare gli studenti il cui cognome inizia per “V” SQL SELECT * FROM Studente WHERE Cognome LIKE “V*”; Q37. Visualizzare gli studenti la cui matricola inizia con “M” ed il cui terzo carattere è un numero (totale 4 caratteri) e la cui città inizia con “RO” SQL SELECT * FROM Studente WHERE (matricola LIKE “M?#?”) AND (Citta LIKE “RO*”); Q38. Visualizzare i nominativi e gli indirizzi degli studenti che hanno un indirizzo email SQL SELECT * FROM Studente WHERE Email IS NOT NULL; N.B. Ovviamente questi sono gli studenti senza un indirizzo email SELECT * FROM Studente WHERE Email IS NULL; Q39. Ordinare alfabeticamente in senso crescente le righe della tabella professori in base agli attributi Cognome e Nome SQL SELECT * FROM Professore ORDER BY Cognome [ASC], Nome[ASC]; N.B. Se si volesse ordinarli in senso decrescente SELECT * FROM Professore ORDER BY Cognome DESC, NomeDESC; Q40. Elencare le valutazioni in “INFORMATICA” in ordine di voto decrescente SQL SELECT * FROM Valutazione WHERE (Materia = “INFORMATICA”) ORDER BY Voto DESC; Q41. Calcolare il numero totale di ore di insegnamento del professore con codice “P-01” SQL SELECT SUM (NumOre) AS TotaleOreIns FROM Insegna WHERE (CodProf2 = “P-01”); Q42. Calcolare la media dei voti dello studente con matricola “M-01” SQL SELECT AVG (Voto) AS MediaVoti FROM Valutazione WHERE (Matricola1 = “M-01”); Q43. Ricercare il voto minimo ed il voto massimo assegnato durante una valutazione di “INFORMATICA” SQL SELECT MAX (Voto) AS VotoMax, MIN (Voto) AS VotoMin FROM Valutazione WHERE (Materia = “INFORMATICA”); Q44. Ricercare il primo cognome tra gli studenti SQL SELECT MIN (Cognome) AS PrimoCognome FROM Studente; N.B. Se si volesse invece l’ultimo SELECT MAX (Cognome) AS UltimoCognome FROM Studente; Q45. Determinare il numero complessivo di professori dell’istituto SQL SELECT COUNT(*) AS TotProf FROM Professore; o equivalentemente SELECT COUNT(CodProf) AS TotProf FROM Professore; Q46. Determinare il numero di valutazioni sufficienti SQL SELECT COUNT(*) AS TotSuff FROM Valutazione WHERE Voto >= 6; Q47. Determinare il numero di classi dell’istituto appartenenti “INFORMATICA” alla specializzazione SQL SELECT COUNT(*) AS NumClassiInf FROM Classe WHERE Specializzazione = “INFORMATICA”; o equivalentemente SELECT COUNT(Classe) AS NumClassiInf FROM Classe WHERE Specializzazione = “INFORMATICA”; Q48. Determinare il numero di specializzazioni presenti in istituto SQL SELECT DISTINCT COUNT(Specializzazione) AS NumSpec FROM Classe; o equivalentemente con la subquery SELECT COUNT (Specializzazione) AS NumSpec FROM (SELECT Specializzazione FROM Classe GROUP BY (Specializzazione) ); SELECT COUNT(*) AS NumSpecializzazioni FROM (SELECT DISTINCT Specializzazione FROM Classe); Q49. Per ogni diversa materia determinare il numero di valutazioni effettuate, visualizzando l’elenco delle materie in ordine alfabetico crescente SQL SELECT Materia, COUNT(*) AS NumVal FROM Valutazione GROUP BY Materia ORDER BY Materia; Q50. Per ogni diversa materia calcolare la media dei voti delle valutazioni effettuate, visualizzando i risultati in ordine decrescente di media SQL SELECT Materia, AVG(Voto) AS Media FROM Valutazione GROUP BY Materia ORDER BY AVG(Voto) DESC; Q51. Calcolare per ogni professore il numero totale di ore di insegnamento visualizzando poi l’elenco dei nominativi dei professori con i corrispondenti valori calcolati in ordine decrescente di nominativo SQL SELECT CodProf, Cognome, Nome, SUM(NumOre) AS TotOre FROM Professore, Insegna WHERE Professore.Codprof=Insegna.CodProf2 GROUP BY CodProf, Cognome, Nome ORDER BY Cognome DESC; Q52. Calcolare per ogni studente la media dei voti riportati nelle valutazioni di “INFORMATICA” visualizzando in ordine decrescente di media l’elenco dei nominativi degli studenti ed i corrispettivi valori calcolati SQL SELECT Matricola, Cognome, Nome, AVG(Voto) AS Media FROM Studente, Valutazione WHERE (Studente.Matricola=Valutazione.Matricola1) AND (Materia =”INFORMATICA”) GROUP BY Matricola, Cognome, Nome ORDER BY AVG(Voto) DESC; Q53. Per ogni diversa materia determinare il numero di valutazioni effettuate visualizzando l’elenco delle materie alle quali corrisponde più di una valutazione SQL SELECT Materia, COUNT(*) AS NumVal FROM Valutazione GROUP BY Materia HAVING COUNT(*) > 1; Q54. Per ogni diversa materia determinare la media dei voti delle valutazioni effettuate, visualizzando in ordine decrescente di media, l’elenco delle materie in cui il valore della media restituito è compreso tra 5 e 6 (estremi compresi) SQL SELECT Materia, AVG(Voto) AS NumVal FROM Valutazione GROUP BY Materia HAVING AVG(Voto) BETWEEN 5 AND 6 ORDER BY AVG(Voto) DESC; Q55. Visualizzare, in ordine alfabetico, i nominativi degli studenti con la media dei voti in “INFORMATICA” che non superi il 6 SQL SELECT Matricola, Cognome, Nome, AVG(Voto) AS MediaInf FROM Studente, Valutazione WHERE (Studente.Matricola=Valutazione.Matricola1) AND (Materia =”INFORMATICA”) GROUP BY Matricola, Cognome, Nome HAVING AVG(Voto) <= 6 ORDER BY Cognome, Nome; Q56. Visualizzare i nominativi degli studenti che hanno conseguito in “INFORMATICA” il voto massimo assegnato in questa materia SQL SELECT Cognome, Nome FROM Studente, Valutazione WHERE (Studente.Matricola=Valutazione.Matricola1) AND (Materia=”INFORMATICA”) AND (Voto = ( SELECT MAX(Voto) FROM Valutazione WHERE (Materia=”INFORMATICA”) ) ); Q57. Visualizzare, in ordine alfabetico, i nominativi dei professori che hanno un numero totale di insegnamento superiore a quelle del professore con codice “P-03” SQL SELECT Cognome, Nome FROM Professore, Insegna WHERE (Professore.CodProf=Insegna.CodProf2) GROUP BY Cognome, Nome HAVING SUM(NumOre) > ( SELECT SUM ( NumOre) FROM Insegna WHERE (CodProf2=”P-03”) ) ORDER BY Cognome, Nome; Q58. Visualizzare i nominativi degli studenti che frequentano classi con più di 1 allievo SQL SELECT Cognome, Nome FROM Classe WHERE (CodClasse1 IN ( SELECT CodiceClasse1 FROM Studente GROUP BY CodiceClasse1 HAVING COUNT(*) >=2 ) ); Q59. Visualizzare, in ordine alfabetico, i nominativi dei professori che non insegnano nella “3H” “INFORMATICA” SQL SELECT Cognome, Nome FROM Professore WHERE (CodProf NOT IN ( SELECT CodProf2 FROM Insegna, Classe WHERE (Insegna.CodClasse2 = Classe.CodClasse) AND (Classe=”3”) AND (Sezione=”H”) AND (Specilaizzazione=”INFORMATICA”) ) ); Q60. Visualizzare “INFORMATICA” i codici dei professori che insegnano nella “3H” e nella “4H” SQL SELECT CodProf2 FROM Insegna, Classe WHERE (Insegna.CodClasse2 = Classe.CodClasse) AND (Classe=”3”) (Specializzazione=”INFORMATICA”) AND (CodProf2 IN ( SELECT CodProf2 FROM Insegna, Classe WHERE (Insegna.CodClasse2 = Classe.CodClasse) (Sezione=”H”) AND (Specializzazione=”INFORMATICA”) ) ); AND (Sezione=”H”) AND AND (Classe=”4”) AND Variante con i nominativi dei docenti SELECT CodProf, Cognome, Nome FROM Professore, Insegna, Classe WHERE (Professore.CodProf=Insegna.CodProf2) AND (Insegna.CodClasse2 = Classe.CodClasse) AND (Classe=”3”) AND (Sezione=”H”) AND (Specializzazione=”INFORMATICA”) AND (CodProf IN ( SELECT CodProf2 FROM Insegna, Classe WHERE (Insegna.CodClasse2 = Classe.CodClasse) AND (Classe=”4”) AND (Sezione=”H”) AND (Specializzazione=”INFORMATICA”) ) ); Q61. Visualizzare i nominativi degli studenti della “3H” “INFORMATICA” che hanno preso voti in “INFORMATICA” superiori ad almeno uno dei voti di “INFORMATICA” degli studenti della “4H” “INFORMATICA” SQL SELECT DISTINCT, Cognome, Nome FROM Valutazione, Studente, Classe WHERE (Valutazione.Matricola1=Studente.Matricola) AND (Studente.CodClasse1 = Classe.CodClasse) AND (Classe=”3”) AND (Sezione=”H”) AND (Specializzazione=”INFORMATICA”) AND (Materia = “INFORMATICA”) AND (Voto > ANY ( SELECT Voto FROM Valutazione, Studente, Classe WHERE (Valutazione.Matricola1=Studente.Matricola) AND (Studente.CodClasse1 = Classe.CodClasse) AND (Classe=”4”) AND (Sezione=”H”) AND (Specializzazione=”INFORMATICA”) AND (Materia = “INFORMATICA”) ) ); Q62. Visualizzare i nominativi della “3H” “INFORMATICA” che hanno preso voti di “INFORMATICA” superiori a tutti i voti di “INFORMATICA” degli studenti della “4H” “INFORMATICA” SQL SELECT DISTINCT, Cognome, Nome FROM Valutazione, Studente, Classe WHERE (Valutazione.Matricola1=Studente.Matricola) AND (Studente.CodClasse1 = Classe.CodClasse) AND (Classe=”3”) AND (Sezione=”H”) AND (Specializzazione=”INFORMATICA”) AND (Materia = “INFORMATICA”) AND (Voto > ALL ( SELECT Voto FROM Valutazione, Studente, Classe WHERE (Valutazione.Matricola1=Studente.Matricola) AND (Studente.CodClasse1 = Classe.CodClasse) AND (Classe=”4”) AND (Sezione=”H”) AND (Specializzazione=”INFORMATICA”) AND (Materia = “INFORMATICA”) ) ); Q63. Visualizzare la media degli studenti di “INFORMATICA” solo se esistono studenti iscritti a questa specializzazione SQL SELECT AVG(Voto) AS MediaVotiInf FROM Valutazione, Studente, Classe WHERE (Valutazione.Matricola1=Studente.Matricola) AND (Studente.CodClasse1 = Classe.CodClasse) AND (Specializzazione=”INFORMATICA”) AND EXISTS ( SELECT * FROM Studente, Classe WHERE (Studente.CodClasse1 = Classe.CodClasse) AND (Specializzazione=”INFORMATICA”) ) ); SELECT AVG(Voto) AS MediaVotiInf FROM Valutazione, Studente, Classe WHERE (Valutazione.Matricola1=Studente.Matricola) AND (Studente.CodClasse1 = Classe.CodClasse) AND (Specializzazione=”LINGUISTICA”) AND EXISTS ( SELECT * FROM Studente, Classe WHERE (Studente.CodClasse1 = Classe.CodClasse) AND (Specializzazione=”LINGUISTICA”) ) );