Dispensa SQL - WordPress.com
Transcript
Dispensa SQL - WordPress.com
Esercizi SQL 1. Dato il seguente schema di base di dati relazionale: TURISTA(CF, Nome, Cognome, DataNascita, Telefono) VIAGGIO(Codice, NomeLocalità, Durata, Costo, DataPartenza) PRENOTAZIONE(Turista, Viaggio, DataPrenotazione, TipoPagamento) Sottolineare le chiavi primarie ed indicare i vincoli di chiave esterna. Prenotazione.Turista → Turista.CF Prenotazione.Viaggio → Viaggio.Codice Esprimere in SQL le seguenti interrogazioni: (a) Trovare le informazioni dei viaggi di durata inferiore ai 15 giorni select * from Viaggio where Durata <15 (b) Trovare le diverse località dei viaggi di durata tra i 7 e i 10 giorni select distinct NomeLocalità from Viaggio where Durata >7 and Durata <10 (c) Trovare le informazioni anagrafiche dei clienti il cui cognome inizia con “Ro” ordinate in ordine alfabetico. select * from Turista where Cognome LIKE "Ro%" order by Cognome (d) Trovare le località dei viaggi prenotati dal cliente con codice fiscale “RSSBRT80N21V143T” select V. NomeLocalità from Viaggio V, Prenotazione P where V. Codice =P. Viaggio and Turista =" RSSBRT80N21V143T " (e) Trovare i tipi di pagamento effettuati dal cliente “Mario Rossi”. select P. TipoPagamento from Prenotazione P, Turista T where P. Turista =T.CF and T.Nome=" Mario " and T. Cognome =" Rossi " (f) Trovare le località e le durate dei viaggi prenotati nel dicembre del 2013 select V. NomeLocalità ,V. Durata from Viaggio V, Prenotazione P where V. Codice =P. Viaggio and P. DataPrenotazione between 1/12/2013 and 31/12/2013 (g) Trovare la località e la modalità di pagamento di tutti i viaggi prenotati da Mario Rossi. select V. NomeLocalità , P. TipoPagamento from Turista T, Prenotazione P, Viaggio V where T.CF=P. Turista and P. Viaggio =V. Codice and T.Nome=" Mario " and T. Cognome =" Rossi " 1 (h) Trovare i nomi delle località di tutti i viaggi prenotati da Mario Rossi con Carta di Credito. select V. NomeLocalità from Viaggio V, Turista T, Prenotazione P where T.CF=P. Turista and P. Viaggio =V. Codice and T.Nome=" Mario " and T. Cognome =" Rossi " and P. TipoPagamento =" Carta di Credito " 2. Dato il seguente schema di base di dati relazionale: PERSONA(CF, Cognome, Nome, DataNascita, Sesso, Nazionalità) ALBERGO(PIVAAlbergo, NomeAlbergo, Località, CFProprietario) PRENOTAZIONE(PIVAAlbergo, CFCliente, Datainizio, NCamera, Tariffagiornaliera, Datafine) Sottolineare le chiavi primarie ed indicare i vincoli di chiave esterna. Albergo.CFProprietario → Persona.CF Prenotazione.PIVAAlbergo → Albergo.PIVAAlbergo Prenotazione.CFCliente → Persona.CF Esprimere in SQL le seguenti interrogazioni: (a) Trovare le informazioni degli alberghi di “Milano”. select * from Albergo where Località =" Milano " (b) Trovare il codice fiscale del cliente “Mario” “Rossi”. select CF from Persona where Nome=" Mario " and Cognome =" Rossi " (c) Trovare nome e località di alberghi il cui nome inizia per “Mira” e ordinare il risultato in base alla località. select NomeAlbergo , Località from Albergo where NomeAlbergo LIKE "Mira%" order by Località (d) Trovare le diverse tariffe pagate dal cliente con codice fiscale “RSSBRT80N21V143T” per prenotazioni in alberghi di “Milano” select distinct P. Tariffagiornaliera from Prenotazione P, Albergo A where P. PIVAAlbergo =A. PIVAAlbergo and P. CFCliente =" RSSBRT80N21V143T " and A. Località =" Milano " (e) Trovare nome e cognome dei proprietari di tutti gli alberghi denominati “Miramare”; select C.Nome , C. Cognome from Persona C, Albergo A where A. CFProprietario =C.CF and A. NomeAlbergo =" Miramare " (f) Trovare la tariffa giornaliera relativa alla prenotazione effettuata dal Sig. Paolo Bianchi nell’albergo “Città Studi” di “Milano”; 2 select P. Tariffagiornaliera from Prenotazione P, Persona C, Albergo A where P. PIVAAlbergo =A. PIVAAlbergo and P. CFCliente =C.CF and C.Nome=" Paolo " and C. Cognome =" Bianchi " and A. NomeAlbergo =" Città studi " and A. Località =" Milano " (g) Trovare le date di inizio, il nome dell’albergo e la relativa località, delle prenotazioni effettuate da “Mario Rossi” con data inizio successiva al 1/1/08. select P. Datainizio ,A. NomeAlbergo ,A. Località from Prenotazione P, Albergo A, Persona C where P. PIVAAlbergo =A. PIVAAlbergo and P. CFCliente =C.CF and C.Nome=" Mario " and C. Cognome =" Rossi " and P. Datainizio >1/1/08 (h) Trovare i nomi dei diversi alberghi prenotati dal Sig. Mario Rossi. select distinct A. NomeAlbergo from Prenotazione P, Albergo A, Persona C where P. PIVAAlbergo =A. PIVAAlbergo and P. CFCliente =C.CF and C.Nome=" Mario " and C. Cognome =" Rossi " 3. (TdE 18/09/2013) Facendo riferimento al seguente schema logico: Volo (Codice, Data, aeroportoPartenza, aeroportoArrivo, Durata) ComposizioneVolo (CodiceVolo, DataVolo, CFPasseggero) Passeggero (CF, Nome, Cognome, DataNascita) indicare le chiavi primarie ed i vincoli di intergrità referenziale. (ComposizioneVolo.CodiceVolo, ComposizioneVolo.DataVolo) → (Volo.Codice, Volo.Data) ComposizioneVolo.CFPasseggero → Passeggero.CF Formulare in SQL le seguenti interrogazioni: (a) Elencare Nome e Cognome dei passeggeri dei voli con aeroporto di destinazione JFK effettuati nel 2013. select Nome , Cognome from Passeggero P, ComposizioneVolo C, Volo V where P.CF=C. CFPasseggero and C. CodiceVolo =V. Codice and C. DataVolo =V.Data and V. aeroportoArrivo ="JFK" and V.Data between 1/1/2013 and 31/12/2013 (b) Fornire il codice dei voli con aeroporto di partenza LIN aventi una durata maggiore di 4 ore. select Codice from Volo where aeroportoPartenza ="LIN" and Durata >4 (c) Fornire Nome e Cognome dei passeggeri nati nel 1973 che hanno effettuato un volo sull’aeroporto MPX nel 2012. select Nome , Cognome from Passeggero P, ComposizioneVolo C, Volo V where P.CF=C. CFPasseggero and C. CodiceVolo =V. Codice and C. DataVolo =V.Data and P. DataNascita between 1/1/1973 and 31/12/1973 and (V. aeroportoArrivo ="MX or V. aeroportoPartenza ="MXP") and V.Data between 1/1/2012 and 31/12/2012 3 4. (TdE 13/02/2014) Facendo riferimento al seguente schema logico: Auto (Targa, Marca, Modello, Km) Cliente(NumPatente, Cognome, Nome, CodiceFiscale, Indirizzo, Cellulare) Noleggio(Patente, Targa, DataInizio, DataFine, Assicurazione, AgenziaPrelievo, AgenziaConsegna) AgenziaNoleggio(Numero, Indirizzo, Città, Titolare) indicare le chiavi primarie ed i vincoli di intergrità referenziale. Noleggio.Patente → Cliente.NumPatente Noleggio.Targa → Auto.Targa Noleggio.AgenziaPrelievo → AgenziaNoleggio.Numero Noleggio.AgenziaConsegna → AgenziaNoleggio.Numero Formulare in SQL le seguenti interrogazioni: (a) Elencare Nome e Cognome dei clienti che hanno ritirato un’auto presso le agenzie di Roma select Nome , Cognome from Cliente C, Noleggio N, AgenziaNoleggio A where C. NumPatente =N. Patente and N. AgenziaPrelievo =A. Numero and A. Città ="Roma" (b) Elencare Nome e Cognome dei clienti che hanno affittato un’auto nel 2014 e che hanno effettuato una consegna in un’agenzia diversa da quella di prelievo select Nome , Cognome from Cliente C, Noleggio N where C. NumPatente =N. Patente and N. DataInizio between 1/1/2014 and 31/12/2014 and N. AgenziaPrelievo <>N. AgenziaConsegna (c) Indicare il modello delle auto per le quali sono stati effettuati noleggi con assicurazione full select Modello from Auto A, Noleggio N where A. Targa =N. Targa and N. Assicurazione ="full" 5. (TdE 03/09/2013) Dato il seguente schema relazionale: Articolo(Id, Titolo, Autore, Testo, Data) Giornalista(ID, Nome, Cognome, DataNascita) Giornale(ID, Testata, CasaEditrice) Scrive(IDGiornale,IDGiornalista) Sottolineare le chiavi primarie ed indicare i vincoli di integrità referenziale. Articolo.Autore → Giornalista.ID Scrive.IDGiornale → Giornale.ID Scrive.IDGiornalista → Giornalista.ID Definire le seguenti interrogazione in SQL: (a) Elencare gli articoli (fornendone Titolo e Data) scritti da Jacopo Fo nel 2012 select Titolo , Data from Articolo , Giornalista G where Autore =G.ID and Nome=" Jacopo " and Cognome ="Fo" and Data between 1/1/2012 and 31/12/2012 4 (b) Fornire il Titolo, Cognome e Nome dell’autore degli articoli il cui testo contenga almeno una volta la parola spread select Titolo , Cognome , Nome from Articolo A, Giornalista G where A. Autore =G.ID and A. Testo LIKE "% spread %" (c) Elencare i giornalisti (fornendone Nome e Cognome) del “Corriere della Sera” che abbiano scritto almeno un articolo il cui titolo contenesse le parole “crisi” ed “economia” select G.Nome , G. Cognome from Giornalista G, Giornale G1 , Scrive S, Articolo A where G.ID=S. IDGiornalista and S. IDGiornale =G1.ID and G1. Testata =" Corriere della sera" and A. Autore =G.ID and A. Testo LIKE "% crisi%" and A. Testo LIKE "% economia %" 6. Dato il seguente schema logico: LINEA(ID,Nome,Distanza,NumeroStazioni) COMPOSIZIONE_LINEA(IDLinea,IDStazione) TRENO(ID,IDLinea) STAZIONE(ID,Nome,TelefonoUfficioCentrale) CORSA(StazionePartenza,StazioneDestinazione,Data,Ora,IDTreno,Macchinista) MACCHINISTA(Matricola,Cognome,Nome,Indirizzo) Individuare le chiavi primarie e i vincoli di integrità referenziale. Composizione Linea.IDLinea → Linea.ID Composizione Linea.IDStazione → Stazione.ID Treno.IDLinea → Linea.ID Corsa.StazionePartenza → Stazione.ID Corsa.StazioneDestinazione → Stazione.ID Corsa.IDTreno → Treno.ID Corsa.Macchinista → Macchinista.Matricola Formulare in SQL le seguenti interrogazioni: (a) Fornire il numero di stazioni della linea verde select NumeroStazioni from Linea where Nome=" Verde " (b) Elencare i nomi delle stazioni della linea gialla select S.Nome from Linea L, Composizione_Linea C, Stazione S where L.ID=C. IDLinea and C. IDStazione =S.ID and L.Nome=" Gialla " 5