/* \i 'H:\\0-BasidiDati_2024-25\\Moodle_2-SoluzioniDiEsercizi\\Musiche-3-CanaA_Query.sql' */ \qecho '\nDati usati per il test:\n' SELECT * FROM PERSONE; SELECT * FROM ALBUM; SELECT * FROM CANZONI; SELECT * FROM ALBUM_CANZO; \qecho '\n\nG. Elencate gli identificatori degli album che contengono canzoni che sono tutte di un solo cantante' \qecho ' e che contengono almeno tre canzoni di anni precedenti all''anno dell''album.' /* Risolto da: Gianmarco Zin e altri */ /* Ogni album cantato da un unico cantante */ SELECT AC.IdeAlbum FROM ALBUM_CANZO AS AC JOIN CANTANTI_CANZO AS CC ON AC.IdeCanzone = CC.IdeCanzone GROUP BY AC.IdeAlbum HAVING COUNT(DISTINCT(CC.NomePersona)) = 1 INTERSECT /* Ogni album contenente almeno 3 canzoni di anni precedenti l''album */ SELECT AC.IdeAlbum FROM ALBUM_CANZO AS AC JOIN CANZONI AS C ON AC.IdeCanzone = C.IdeCanzone JOIN ALBUM AS A ON AC.IdeAlbum = A.IdeAlbum WHERE C.AnnoCanzone < A.AnnoAlbum GROUP BY AC.IdeAlbum HAVING COUNT(*) >= 3; \qecho '\n\nH. Elencate i nomi dei cantanti che non hanno mai cantato in un intero album da soli.' /* Risolto da: Gianmarco Zin */ /* Ogni cantante */ SELECT DISTINCT NomePersona FROM CANTANTI_CANZO EXCEPT /* Ogni cantante che ha cantato in un intero album da solo */ SELECT DISTINCT CC.NomePersona FROM ALBUM_CANZO AS AC JOIN CANTANTI_CANZO AS CC ON AC.IdeCanzone = CC.IdeCanzone WHERE AC.IdeAlbum IN ( /* Ogni album cantato da un unico cantante */ SELECT AC.IdeAlbum FROM ALBUM_CANZO AS AC JOIN CANTANTI_CANZO AS CC ON AC.IdeCanzone = CC.IdeCanzone GROUP BY AC.IdeAlbum HAVING COUNT(DISTINCT(CC.NomePersona)) = 1 ); \qecho '\n\nI. Elencate i nomi dei cantanti che non hanno mai cantato una canzone come solisti.' /* Risolto da: Marco Stradiotto e altri */ /* Ogni cantante. */ SELECT DISTINCT NomePersona FROM CANTANTI_CANZO EXCEPT /* Ogni cantante che ha cantato da solista in almeno una canzone. */ SELECT NomePersona FROM CANTANTI_CANZO WHERE IdeCanzone IN ( /* Identificativo di ogni canzone cantata da un unico cantante. */ SELECT IdeCanzone FROM CANTANTI_CANZO GROUP BY IdeCanzone HAVING COUNT(NomePersona) = 1 ); \qecho '\n\nJ. Elencate i nomi dei cantanti che hanno cantato soltanto come solisti.' /* Risolto da: Fioranzato Nicolò */ /* Ogni cantante. */ SELECT C_C.NomePersona FROM CANTANTI_CANZO AS C_C EXCEPT /* Ogni cantante di una canzone cantata da almeno due cantanti. */ SELECT C_C.NomePersona FROM CANTANTI_CANZO AS C_C WHERE C_C.IdeCanzone IN ( /* Canzoni cantate da almeno due cantanti. */ SELECT C_C.IdeCanzone FROM CANTANTI_CANZO AS C_C GROUP BY C_C.IdeCanzone HAVING COUNT(*) > 1 ); \qecho '\n\nJ. K. Per ogni identificatore di canzone, elencate l’identificatori di ogni album nel quale la canzone e` stata pubblicata per prima e mostrate l’anno di questa pubblicazione.' /* Risolto da: Fioranzato Nicolò */ SELECT AC.IdeCanzone, AC.IdeAlbum, A.AnnoAlbum FROM ALBUM AS A JOIN ALBUM_CANZO AS AC ON A.IdeAlbum = AC.IdeAlbum WHERE A.AnnoAlbum = ( /* Anno minimo tra gli album che contengono A.IdeCanzone. */ SELECT MIN(A.AnnoAlbum) FROM ALBUM AS A JOIN ALBUM_CANZO AS AC2 ON A.IdeAlbum = AC2.IdeAlbum WHERE AC.IdeCanzone = AC2.IdeCanzone );