Eprogram ITIS V anno Unità 4 - Il linguaggio SQL Compito in classe proposto Date le seguenti tabelle: scrivi in SQL le seguenti richieste (per facilitare query complesse utilizza le viste): 1. elencare in ordine alfabetico i paesi con il loro numero di abitanti e la loro superficie 2. elencare i continenti e il numero di nazioni che li compongono 3. visualizzare la densità di popolazione per tutti i paesi dell'europa 4. visualizzare il nome della nazione più popolosa 5. visualizzare il nome della nazione più popolosa del continente Asia 6. elencare i continenti con il loro numero di abitanti e la loro superficie 7. elencare il nome delle nazioni che hanno estensione maggiore di quella francese
Unità 4 - Il linguaggio SQL 8. per ogni continente mostrare il numero di paesi con almeno 10 milioni di abitanti 9. incrementare di 1000 unità la popolazione di India, Cina, Giappone, Pakistan 10. stampare il numero di Km 2 incolti in Italia 11. visualizzare l'estensione in Km 2 per ciascuna coltivazione 12. visualizzare il nome della coltivazione che occupa il territorio più vasto in Italia 13. visualizzare il nome delle coltivazioni presenti nel continente Asia che si estendono su un territorio > 200 Km 2 14. elencare il nome delle coltivazioni non più coltivate 15. elencare il nome delle coltivazioni che non sono presenti in Italia
Soluzione compito in classe proposto Soluzione compito in classe proposto Sviluppa la soluzione procedendo per punti. 1. È sufficiente utilizzare la tabella Nazioni e visualizzare tutte le righe dopo averle ordinate usando la funzione ORDER BY SELECT Nome, NumAb, Kmq ORDER BY Nome 2. È necessario calcolare il numero di nazioni per ciascun continente usando la funzione GROUP BY SELECT COUNT(*), Continente GROUP BY Continente 3. La densità della popolazione è data dal rapporto fra il numero di abitanti della nazione e la sua superficie. Dalla tabella nazioni sono estratte solo le righe relative a nazioni europee Select NumAb/Km FROM NAZIONI Where continente = 'Europa' 4. Ottiene il nome della nazione più popolosa con due query annidate: la subquery restituisce il numero di abitanti massimo, la query esterna estrae il nome delle nazioni con numero abitanti uguale al massimo appena determinato. SELECT Nome WHERE NumAb = (SELECT MAX(NumAb) )
Unità 4 - Il linguaggio SQL 5. Risolvi questo quesito mediante due query annidate: la subquery restituisce il numero di abitanti massimo per il continente asiatico, la query esterna estrae, tra le nazioni asiatiche, il nome di quelle con numero abitanti uguale al massimo appena determinato SELECT nome FROM NAZIONI WHERE NumAb = ( select max(numab) from nazioni where nazioni.continente = "Asia") and continente = "Asia" 6. Devi determinare la somma degli abitanti e la somma dei Kmq per ciascun continente usando la funzione GROUP BY. SELECT Continente, SUM (NumAb), SUM (Km) GROUP BY Continente 7. Risolvi questo quesito mediante due query annidate: la subquery restituisce il numero di kmq della Francia, la query esterna estrae il nome delle nazioni con estensione maggiore di quella appena determinata SELECT Nome Where Km > (SELECT Km from Nazioni WHERE Nome ='Francia') 8. Devi determinare il numero di paesi per ogni continente usando la funzione GROUP BY. Vengono presi in considerazione solo i paesi che hanno più di 10 milioni di abitanti (clausola WHERE). SELECT COUNT(Nome), Continente WHERE NumAb > 100000 GROUP BY Continente;
Soluzione compito in classe proposto 9. Utilizza il comando UPDATE per modificare le righe della tabella. Prendi in considerazione le nazioni il cui nome è presente nell elenco (India, Cina, Giappone, Pakistan) UPDATE Nazioni SET NumAb = NumAb + 1000 WHERE nome IN ( 'India','Cina','Giappone','Pakistan') 10. Puoi determinare il numero di Km 2 incolti in Italia calcolando dapprima, tramite la vista V_Italia, il numero di Km 2 coltivati per l Italia e successivamente calcoli la differenza tra il numero di Km 2 dell Italia e il valore determinato nella vista. CREATE VIEW V_Italia AS SELECT Sum(km) AS Coltivati INTO Tab1 WHERE Nome = "Italia"; SELECT (Nazioni.Km - Tab1.Coltivati) as Incolti FROM V_Italia, Nazioni where Nome = "Italia" 11. Devi prelevare i dati dalla tabella Coltivare e, per determinare la somma dei kmq coltivati per ciascuna coltivazione, devi usare la funzione GROUP BY. Per visualizzare anche il nome della coltivazione esegui un operazione di JOIN fra le tabelle Tipo e Coltivazione SELECT Sum(Kmq), Coltivazione, Tipo where Coltivare.Cod_Colt = Tipo.Id_Colt GROUP BY Coltivazione; oppure: SELECT Sum(Kmq), Coltivazione Inner Join Tipo ON Coltivare.Cod_Colt = Tipo.Id_Colt GROUP BY Coltivazione;
Unità 4 - Il linguaggio SQL 12. Risolvi questa query utilizzando le query annidate: con la query interna determini l estensione in Kmq della coltivazione più estesa in Italia,con quella esterna estrai il nome della coltivazione che in Italia si estende per una superficie uguale alla superficie determinata nella subquery SELECT Coltivazione FROM Tipo,coltivare WHERE Coltivare.Cod_colt = Tipo.Id_Colt AND Kmq = (SELECT Max(Kmq) WHERE nome = 'Italia') and nome = 'Italia'; oppure: SELECT Coltivazione FROM Tipo INNER JOIN Coltivare ON Coltivare.Cod_colt = Tipo.Id_Colt WHERE Kmq = (SELECT Max(Kmq) WHERE nome = 'Italia') and nome = 'Italia' 13. Devi prelevare i dati dalla tabella Coltivare e per determinare la somma dei kmq coltivati per ciascuna coltivazione asiatica devi raggrupparli per coltivazione. Di questi raggruppamenti prendi in considerazione solo quelli che hanno una superficie maggiore a 200 Km 2 Per visualizzare anche il nome della coltivazione esegui un operazione di JOIN fra le tabelle Tipo e Coltivazione SELECT Coltivazione, Sum(Kmq) FROM Tipo, Coltivare, Nazioni Where coltivare.nome = Nazioni.Nome AND COLTIVARE.Cod_Colt = Tipo.Id_Colt AND Continente = "Asia" GROUP By coltivazione HAVING Sum(Kmq) > 200
Soluzione compito in classe proposto 14. Risolvi questa query si utilizzando un operazione di LEFT JOIN tra le tabelle Tipo e Coltivare. Po,i per considerare solo le righe del risultato che sono presenti nella tabella Tipo ma non nella tabella Coltivare dovrai considerare le righe che presentano un valore nullo nel campo Kmq SELECT Coltivazione, Kmq FROM Tipo LEFT JOIN Coltivare ON Tipo.Id_colt = Coltivare.Cod_colt WHERE Kmq IS NULL; 15. Risolve questa query utilizzando le query annidate: nella query interna determini il nome delle coltivazioni presenti in Italia, in quella esterna estrai il nome delle coltivazioni che non sono presenti nell insieme di nomi determinato nella subquer.y SELECT Coltivazione FROM TIPO WHERE Id_Colt NOT IN (SELECT Cod_Colt WHERE nome = 'Italia')