



Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Corso gestionale informatica aiuti
Tipologia: Esercizi
1 / 7
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




Esercizio 1. Dato lo schema relazionale costituito dalle tabelle (le chiavi primarie sono sottolineate):
RIVISTA (CodR, NomeR, Editore) ARTICOLO (CodA, Titolo, Argomento, CodR) esprimere in SQL le seguenti interrogazioni: (a) Trovare il codice e il nome delle riviste che hanno pubblicato almeno un articolo di argomento ’motociclismo’.
SELECT R.CodR, NomeR FROM RIVISTA R, ARTICOLO A WHERE R.CodR=A.CodR AND Argomento=’motociclismo’;
———————————–
SELECT CodR, NomeR FROM RIVISTA WHERE CodR IN (SELECT CodR FROM ARTICOLO WHERE Argomento=’motociclismo’);
———————————–
SELECT CodR, NomeR FROM RIVISTA R WHERE EXISTS (SELECT * FROM ARTICOLO A WHERE A.CodR = R.CodR AND Argomento=’motociclismo’);
(b) Trovare il codice e il nome delle riviste che non hanno mai pubblicato articoli di argomento ’motociclismo’.
SELECT CodR, NomeR FROM RIVISTA WHERE CodR NOT IN (SELECT CodR FROM ARTICOLO WHERE Argomento=’motociclismo’);
SELECT CodR, NomeR FROM RIVISTA R WHERE NOT EXISTS (SELECT * FROM ARTICOLO A WHERE A.CodR = R.CodR AND Argomento=’motociclismo’);
(c) Trovare il codice e il nome delle riviste che hanno pubblicato solo articoli di motociclismo.
SELECT R.CodR, NomeR FROM RIVISTA R, ARTICOLO A WHERE R.CodR = A.CodR AND R.CodR NOT IN (SELECT CodR FROM ARTICOLO WHERE Argomento <> ’motociclismo’);
———————————–
SELECT R.CodR, NomeR FROM RIVISTA R, ARTICOLO A WHERE R.CodR = A.CodR AND NOT EXISTS (SELECT * FROM ARTICOLO A WHERE A2.CodR = R.CodR AND Argomento <> ’motociclismo’);
(d) Trovare il codice e il nome delle riviste che pubblicano articoli di motociclismo oppure di auto.
SELECT R.CodR, NomeR FROM RIVISTA R,ARTICOLO A WHERE R.CodR=A.CodR AND (Argomento=’motociclismo’ OR Argomento=’auto’);
(e) Trovare il codice e il nome delle riviste che pubblicano articoli sia di motociclismo sia di auto.
SELECT R.CodR, NomeR FROM RIVISTA R,ARTICOLO A WHERE R.CodR=A.CodR AND Argomento=’motociclismo’ AND R.CodR IN (SELECT CodR FROM ARTICOLO WHERE Argomento=’auto’);
———————————–
(b) Trovare i codici e i nomi dei velisti che hanno prenotato una barca rossa e una verde.
SELECT V.Vid, VNome FROM VELISTI V, PRENOTAZIONI P, BARCHE B WHERE V.Vid = P.Vid AND B.Bid = P.Bid AND Colore=’Rosso’ AND V.Vid IN (SELECT Vid FROM PRENOTAZIONI P, BARCHE B WHERE B.Bid = P.Bid AND Colore=’Verde’ ); ———————————– SELECT Vid, VNome FROM VELISTI V WHERE Vid IN (SELECT Vid FROM PRENOTAZIONI P, BARCHE B WHERE B.Bid = P.Bid AND Colore=’Rosso’) AND Vid IN (SELECT Vid FROM PRENOTAZIONI P, BARCHE B WHERE B.Bid = P.Bid AND Colore=’Verde’ );
(c) Trovare i codici dei velisti che non hanno mai prenotato una barca rossa. SELECT Vid FROM VELISTI V WHERE Vid NOT IN (SELECT Vid FROM PRENOTAZIONI P, BARCHE B WHERE B.Bid = P.Bid AND Colore=’Rosso’);
(d) Trovare i codici e i nomi dei velisti che non hanno mai prenotato una barca rossa.
SELECT Vid, VNome FROM VELISTI V WHERE Vid NOT IN (SELECT Vid FROM PRENOTAZIONI P, BARCHE B WHERE B.Bid = P.Bid AND Colore=’Rosso’); ———————————– SELECT Vid, VNome FROM VELISTI V WHERE NOT EXISTS (SELECT * FROM PRENOTAZIONI P, BARCHE B WHERE B.Bid = P.Bid AND V.Vid = P.Vid AND Colore=’Rosso’);
(e) Trovare i codici e i nomi dei velisti che hanno prenotato almeno due barche diverse. SELECT V.Vid, VNome FROM VELISTI V, PRENOTAZIONI P WHERE V.Vid = P.Vid GROUP BY V.Vid, VNome HAVING COUNT(DISTINCT Bid) >= 2; ———————————– SELECT Vid, VNome FROM VELISTI V WHERE Vid IN (SELECT Vid FROM PRENOTAZIONI GROUP BY Vid HAVING COUNT(DISTINCT Bid) >= 2);
(f) Trovare i codici e i nomi dei velisti che hanno prenotato almeno tre barche diverse. SELECT V.Vid, VNome FROM VELISTI V, PRENOTAZIONI P WHERE V.Vid = P.Vid GROUP BY V.Vid, VNome HAVING COUNT(DISTINCT Bid) >= 3; ———————————– SELECT Vid, VNome FROM VELISTI V WHERE Vid IN (SELECT Vid FROM PRENOTAZIONI GROUP BY Vid HAVING COUNT(DISTINCT Bid) >= 3);
(g) Trovare i codici e i nomi dei velisti che hanno effettuato almeno tre prenotazioni.
SELECT V.Vid, VNome FROM VELISTI V, PRENOTAZIONI P WHERE V.Vid = P.Vid GROUP BY V.Vid, VNome HAVING COUNT() >= 3; ———————————– SELECT Vid, VNome FROM VELISTI V WHERE Vid IN (SELECT Vid FROM PRENOTAZIONI GROUP BY Vid HAVING COUNT() >= 3);
(c) Trovare i codici e i nomi dei dipendenti abilitati al volo su almeno due aerei in grado di coprire distanze superiori a 5000 Km e che siano abilitati al volo su qualche Boeing. SELECT D.Did, DNome FROM DIPENDENTE D, CERTIFICATO C, AEREO A WHERE D.Did = C.Did AND C.Aid = A.Aid AND Autonomia > 5000 AND Did IN (SELECT Did FROM CERTIFICATO C, AEREO A WHERE C.Aid = A.Aid AND ANome =’Boeing’) GROUP BY D.Did, DNome HAVING COUNT() >= 2; ———————————– SELECT Did, DNome FROM DIPENDENTE WHERE Did IN (SELECT Did FROM CERTIFICATO C, AEREO A WHERE C.Aid = A.Aid AND Autonomia > 5000 GROUP BY Did HAVING COUNT() >= 2) AND Did IN (SELECT Did FROM CERTIFICATO C, AEREO A WHERE C.Aid = A.Aid AND ANome =’Boeing’);