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