Corso di Basi di Dati Esercitazione: L’algebra relazionale Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/ Esercizio 1 Dato il seguente schema: POETA(Nome, Cognome, AnnoNascita, LuogoNascita) ROMANZIERE (Nome, Cognome, Anno, LuogoNatio) Scrivere in algebra relazionale la query che determina: 1. Il cognome dei poeti nati a Bologna nel 1966. Esercizio 1 Dato il seguente schema: POETA(Nome, Cognome, AnnoNascita, LuogoNascita) ROMANZIERE (Nome, Cognome, Anno, LuogoNatio) Scrivere in algebra relazionale la query che determina: 2. Nome, cognome e Luogo di nascita dei poeti che NON sono romanzieri. Esercizio 1 Dato il seguente schema: POETA(Nome, Cognome, AnnoNascita, LuogoNascita) ROMANZIERE (Nome, Cognome, Anno, LuogoNatio) Scrivere in algebra relazionale la query che determina: 3. Nome e cognome degli scrittori (poeti + romanzieri) il cui anno di nascita non sia definito. Esercizio 2 Dato il seguente schema: UTENTE(CODICE,NOME,COGNOME) LIBRO(TITOLO,AUTORE) PRESTITI(TITLIBRO,CODUTENTE,DATA) Scrivere in algebra relazionale la query che determina: 1. I titoli dei libri avuti in prestito da “Giovanni Rossi”. Esercizio 2 Dato il seguente schema: UTENTE(CODICE,NOME,COGNOME) LIBRO(TITOLO,AUTORE) PRESTITI(TITLIBRO,CODUTENTE,DATA) Scrivere in algebra relazionale la query che determina: 2. I titoli dei libri che non sono in prestito. Esercizio 2 Dato il seguente schema: UTENTE(CODICE,NOME,COGNOME) LIBRO(TITOLO,AUTORE) PRESTITI(TITLIBRO,CODUTENTE,DATA) Scrivere in algebra relazionale la query che determina: 3. Nome e cognome degli utenti che hanno avuto in prestito libri di “Verga” in data 10/5/2012. Esercizio 3 Data la seguente relazione: R(A, B, C, D, E, F) Quali delle seguenti proiezioni hanno lo stesso numero di righe di R? P A,B,C,D,E,F (R) P A,B,D,E (R) P A,B,C,F (R) P A,D (R) Esercizio 4 Data la seguenti relazioni: R1(A,B,C) R2(D,E,F) Con cardinalita’: |R1|=N1 e |R2|=N2. Indicare la cardinalita’ del join nei seguenti casi: R1 A=D R2 R1 A=E R2 R1 R1 A=E B=E R2 R2 (con vincolo di integrita’ referenziale tra A ed E) Esercizio 5 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) Scrivere in algebra relazionale la query (ottimizzata) che determina Nome, Cognome e Data di Nascita dei clienti che in data 15/01/2013 hanno noleggiato veicoli immatricolati nel 2005. Esercizio 5 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) PNOME,COGNOME,DATANASCITA ( ((VEICOLI TARGA=TARGAVEICOLOÙANNOIMMATRICOLAZIONE=2005ÙDATA=15/01/2013 NRPATENTE=PATENTECLIENTE CLIENTI))) NOLEGGIO) Esercizio 5 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) PNOME,COGNOME,DATANASCITA ( ((s ANNOIMMATRICOLAZIONE=2005VEICOLI s TARGA=TARGAVEICOLO DATA=15/01/2013 NRPATENTE=PATENTECLIENTE CLIENTI))) NOLEGGIO) Esercizio 5 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) Esercizio 5 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) Scrivere in algebra relazionale (ottimizzazione NON richiesta) la query che determina le targhe dei veicoli che non sono stati MAI noleggiati a Bologna. Esercizio 5 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) Esercizio 6 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) Scrivere in SQL ed algebra relazionale la query che determina il Modello di veicolo piu’ noleggiato tra quelli immatricolati tra il 2000 ed il 2010. Esercizio 6 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) Algebra relazionale NON esprimibile! Esercizio 6 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) CREATE VIEW NUM_NOLEGGI(MOD,TOTALE) AS SELECT MODELLO, COUNT(*) FROM NOLEGGIO, VEICOLI WHERE ((TARGAVEICOLO=TARGA) AND (ANNOIMMATRICOLAZIONE IN (2000,2010))) GROUPBY MODELLO Esercizio 6 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) SELECT MODELLO FROM NUM_NOLEGGI WHERE TOTALE = (SELECT MAX(TOTALE) FROM NUM_NOLEGGI) Esercizio 6 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) Scrivere in SQL ed algebra relazionale la query che determina Nome e Cognome dei Clienti che hanno noleggiato almeno 2 veicoli presso la sede di Bologna. Esercizio 6 Data la seguenti relazioni: VEICOLI(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome,DataNascita) NOLEGGIO(TargaVeicolo,Data,PatenteCliente,SedeCitta) SELECT NOME, COGNOME FROM CLIENTI, NOLEGGIO WHERE ((PATENTECLIENTE = NRPATENTE) AND (SEDECITTA=BOLOGNA)) GROUP BY PATENTECLIENTE, NRPATENTE HAVING COUNT(*) >=2