Dimensione: px
Iniziare la visualizzazioe della pagina:

Download ""

Transcript

1 BASI DI DATI e SISTEMI INFORMATIVI LABORATORIO Esercizi di SQL (esercizi raccolti dalla rete e rivisti) D.Gubiani

2 ESERCIZIO 1 Consideriamo la base di dati di un agenzia che organizza banchetti e contiene diverse informazioni riguardanti la sua attività: - anagrafica persone, contenente i dati delle delle persone che si rivolgono all agenzia per organizzare un banchetto - informazioni sui banchetti organizzati in occasione di particolari eventi (congressi, matrimoni, ) per conto dei clienti - un elenco di ristoranti, tra cui ci sono anche ristoranti caratteristici che sono quelli che offrono particolari specialità - un elenco delle portate tra cui si distinguono le specialità - un insieme di menu con l elenco delle portate di cui sono composti - la descrizione degli ingredienti di cui una portata è composta. La base di dati dell azienda (esercizio1.mdb) presenta il seguente schema relazionale: RISTORANTE(NomeRist, Località, Indirizzo, Telefono, nposti) RISTORANTE_OFFRE_MENU(NomeRist, IdMenu, Prezzo) MENU(IdMenu, descrizione) MENU_PORTATA(IdMenu, NomePortata) PORTATA(NomePortata, Prezzo, Tipo, Specialità) INGREDIENTE(NomeIngrediente, Tipo) INGREDIENTI_IN_PORTATA(NomePortata, NomeIngrediente, Quantità) BANCHETTO(Codice, Occasione, Data, npartecipanti, CodFiscCliente,NomeRistorante, IdMenu) PERSONA(CodiceFiscale, Nome, Cognome, DataNascita, Indirizzo,nTelefono, Professione) che secondo lo schema di Microsoft Access può essere così rappresentato: Scrivere le interrogazioni SQL per rispondere alle seguenti richieste: 1) trovare il nome di tutti i ristoranti che si trovano a Verona 2) trovare il nome e la località di tutti i ristoranti che hanno più di 150 posti

3 3) trovare nome e tipo di tutte le specialità disponibili nei ristoranti caratteristici in cui l agenzia organizza banchetti 4) trovare data, numero dei partecipanti e nome del ristorante per i banchetti organizzati in occasione di matrimoni a Verona 5) trovare tutte le informazioni relative al banchetto con codice uguale a 1 6) trovare il nome di tutte le portate che hanno tra gli ingrediente o patate o carote 7) trovare il nome di tutte le portate che hanno tra gli ingrediente o gr. 30 di carote o gr. 50 di patate 8) trovare le diverse località in cui si trovano i ristoranti disponibili 9) trovare nome e prezzo di tutti i secondi ordinando in modo crescente il risultato in base al prezzo 10)trovare il prezzo del secondo piatto che costa di più 11)trovare il numero di menù con un prezzo inferiore a 20 euro 12)trovare nome e cognome delle persone che si sono rivolte all agenzia per organizzare un banchetto 13)trovare il nome e il numero di invitati di tutti i ristoranti di Verona in cui é stato organizzato un banchetto per un matrimonio con più di 100 invitati e visualizzare i risultati in ordine decrescente sul numero di invitati 14)trovare tutti gli ingredienti delle specialità 15)trovare il nome dei ristoranti e la rispettiva località che hanno un menù in cui offrono le penne al ragù 16)trovare le portate dei menù che costano 7 euro (il risultato deve contenere anche l ID del menù) 17)trovare tutti i secondi piatti che stanno in menù da 15 euro (indicare anche il menu di cui fanno parte e se sono specialità) 18)trovare il nome e la località di tutti i ristoranti caratteristici (ristoranti che offrono specialità) 19)trovare gli ingredienti di tutti i primi piatti che non sono specialità e appartengono a menù con un costo inferiore ai 20 euro (nel risultato riportare anche il nome della portata) 20)trovare tutti i menù che non offrono il dolce 21)trovare i menù che prevedono portate con ingredienti di tipo verdura ma senza carne 22)trovare il nome dei ristoranti di Verona che offrono menù che prevedono portate con almeno gr. 30 di patate ma senza carote

4 ESERCIZIO 2 Creare utilizzando istruzioni SQL il seguente schema relazionale: STADIO (Nome, Citta, Capienza) SQUADRA (Nome, Citta, Girone, Punteggio) PARTITA (Nomestadio, Data, Squadra1, Squadra2, Retifatte, Retisubite) Si noti che - nella relazione SQUADRA il Punteggio si riferisce al punteggio della squadra nel proprio girone - nella relazione PARTITA per Squadra1 si intende la squadra di casa, e le Retifatte e Retisubite si riferiscono alla Squadra1. Scrivere le istruzioni SQL per inserire i seguenti dati: Nome Città Capienza Olimpico Roma San Siro Milano Arena Garibaldi Pisa Stadio Lucca Lucca Nome Città Girone Punteggio Milan Milano A 12 Inter Milano A 11 Lazio Roma A 10 Pisa Pisa B 3 Livorno Livorno B 5 Lucca Lucca B 4 Nome stadio Data Squadra1 Squadra2 Retifatte Retisubite Olimpico 7/2/2004 Lazio Milan 1 3 San Siro 7/2/2004 Inter Pisa 5 0 Stadio Lucca 17/2/2004 Livorno Lucca 2 1 Arena Garibaldi 27/2/2004 Pisa Livorno 1 1 Olimpico 14/3/2004 Lazio Inter San Siro 14/3/2004 Lazio Inter San Siro 28/3/2004 Milan Inter Scrivere nel linguaggio SQL le interrogazioni che restituiscono le seguenti informazioni: 1) il numero totale di partite vinte dall Inter con squadre del girone B 2) il totale delle reti segnate in stadi con capienza maggiore di spettatori 3) il numero totale di reti segnate da squadre del girone A in stadi con una capienza maggiore di spettatori 4) la somma delle reti fatte dalla Lazio a squadre milanesi 5) la capienza degli stadi in cui ci saranno partite da giocare (non si vogliono valori duplicati) 6) le date in cui sono state giocate o saranno da giocare più di una partita 7) il punteggio delle squadre che non giocano con la Lazio 8) la data delle partite in cui il Milan gioca con squadre del girone A aventi più di 10 punti

5 Creare una tabella GironeA(nome, città, nomestadio). Modificare lo schema della tabella GironeA con l aggiunta di un attributo punteggio. Inserire i dati attraverso una query che li seleziona dalle tabelle precedentemente definite e popolate. Aggiungere le istanze (Udinese, Udine, Friuli, 12), (Juventus, Torino, Delle Alpi, 5), (Roma, Roma, Olimpico, 9) e successivamente modificare le istanze della tabella incrementando di 5 il punteggio delle squadre della città di Milano. Infine, eliminare le istanze di GironeA associate alle squadre che hanno un punteggio inferiore a 10. ESERCIZIO 3 Considerare e creare il seguente schema relazionale: CLIENTE (Cod_cliente, Cod_filiale, Nome_cliente,Citta ) FILIALE (Cod_filiale, Nome_filiale, Patrimonio, Citta ) DEPOSITO (Cod_cliente, Cod_filiale, Num_deposito,Saldo) con i vincoli esterni che si possono derivare da tale definizione. Scrivere in SQL le istruzioni per inserire i seguenti dati: Cod_cliente Cod_filiale Nome_cliente Città 1 10 Rossi Pisa 1 20 Rossi Pisa 2 30 Bianchi Pisa 3 30 Verdi Lucca 4 10 Blu Pisa Cod_filiale Nome Patrimonio Città 10 Roma Roma 20 Roma Roma 25 Roma Viterbo 30 Pisa Pisa Cod_cliente Cod_filiale Num_deposito Saldo Infine, scrivere le interrogazioni SQL che restituiscono le seguenti informazioni: 1) il nome degli utenti che non vivono nella città presso cui hanno un conto 2) il numero di deposito dei depositi della filiale ROMA1 3) la somma di tutti i patrimoni delle filiali che sono nella stessa città di ROMA1

6 4) la città della filiale ROMA1 5) il numero di depositi che possiede il cliente ROSSI 6) il saldo totale dei depositi dei clienti abitanti a PISA, per tutti i conti che si trovano in una filiale con un patrimonio maggiore di ) il nome dei clienti abitanti a PISA che abbiano in una filiale di Roma un deposito con saldo maggiore di ) per ogni cliente, la somma dei saldi dei depositi relativi a filiali collocate nella città di residenza del cliente ESERCIZIO 4 Considerare e creare lo schema relazionale relativo a prenotazioni in un teatro: SPETTATORI (Idspettatore, Nominativo,Tel,Quartiere,Citta) CONCERTI (IdConcerto, Titolo, Artista, Data) PRENOTAZIONI (Idspettatore, IdConcerto, PrezzoBiglietto) con FK IDSPETTATORE REFERENCES SPETTATORI FK IDCONCERTO REFERENCES CONCERTI Scrivere le espressioni SQL per inserire dei dati di prova e rispondere alle seguenti interrogazioni: 1) restituire per ogni concerto (titolo) e relativa città il numero delle prenotazioni e il relativo ammontare in euro ordinando il risultato sull'ammontare 2) restituire il numero di spettatori che hanno partecipato a tutti i concerti tra il 10/2/2004 e il 28/2/2004 ESERCIZIO 5 Creare il seguente schema relazionale ed inserire alcuni dati di prova: DIPARTIMENTI (IdDip,Università,Stato) PROGETTI (IdProg,Titolo,AnnoInizio,AnnoFine) PARTECIPANO (IdDipa,IdProg) FK IdDip REFERENCES DIPARTIMENTI FK IdProg REFERENCES PROGETTI Scrivere in SQL le seguenti interrogazioni: 1) Calcolare per ogni dipartimento e per ogni anno il numero di progetti già terminati a cui ha partecipato, escludendo i dipartimenti che hanno partecipato in totale a meno di 3 progetti 2) Elencare le università che non hanno mai partecipato a progetti già terminati

7 ESERCIZIO 6 Creare il seguente schema relazionale e inserire alcuni dati di prova: DOMANDE(IdDomanda, Testo, Obiettivo) POSSIBILIRISPOSTE (IdRisposta, Testo) INTERVISTATI (IdIntervistato, Residenza, LivelloIstruzione, FasciaReddito) RISPOSTERACCOLTE(IdDomanda, IdIntervistato, IdRisposta, Data) FK IdDomanda REFERENCES DOMANDE FK IdRisposta REFERENCES POSSIBILIRISPOSTE FK IdIntervistato REFERENCES INTERVISTATI Note: OBIETTIVO contiene valori interi nell intervallo 0..9 Inserire alcuni dati di prova e scrivere in SQL le seguenti interrogazioni: 1) Restituire per ogni domanda e per ogni relativa risposta raccolta il numero di intervistati che hanno dato la medesima risposta escludendo dal calcolo sia gli intervistati prima del 21/2/2004 e sia le domande con obiettivo superiore a 7; includere solo le risposte date da almeno 5 intervistati 2) Restituire la fascia di reddito con il maggior numero di intervistati. 3) Restituire il livello di istruzione i cui appartenenti hanno dato il maggior numero di risposte ESERCIZIO 7 Creare il seguente schema relazionale: ARTISTI (IdArtista,Nome,Localita,Regione,Sesso) CANZONI (IdCanzone, Nome, Durata, AnnoEdizione, Vendite) SCRIVONO (IdArtista, IdCanzone) FK IdArtista References ARTISTI FK IdCanzone References CANZONI Scrivere in SQL le seguenti interrogazioni: 1) Restituire i nomi degli artisti che hanno scritto almeno 3 canzoni tra il 2002 e il 2003, con una vendita complessiva superiore a 300 2) Restituire le coppie di nomi di artisti che hanno scritto almeno due canzoni insieme