Informatica 3 Liceo Scientifico Scienze Applicate/Es1 PrenotazioneVaporetto

Indice del libro

Agenzia NaveBlu

modifica

L'agenzia NaveBlu di Portotolle cura la vendita ai turisti di viaggi lungo il Po a bordo delle barche dei Pescatori del luogo. Ciascun viaggio dura un sol giorno. Ogni Pescatore ha una sola barca con un certo numero di posti disponibili e il viaggio si snoda lungo un itinerario prefissato che tocca caratteristiche localita' del Delta Polesano .Ogni Itinerario ha una sequenza di localita' decisa dal Capitano della Nave , che puo' essere riproposta anche in giorni diversi. Ogni capitano puo' offrire piu' itinerari (in giorni diversi). Di ciascuna Localita' visitata lungo un particolare itinerario vengono registrate diverse informazioni: una descrizione , due foto , 3 consigli su cosa visitare e un luogo dove poter mangiare del buon pesce.

 
Delta Po Boccasette

L'agenzia che vende i biglietti per potersi imbarcare, deve poter visualizzare per una certo giorno l'elenco dei possibili itinerari con il numero di posti ancora disponibili. Ogni pescatore deve poter conoscere i nominativi delle persone che in una certa data si dovranno imbarcare. L'agenzia per un particolare itinerario relativo a un certo giorno deve poter visualizzare il numero di posti ancora disponibili. L'agenzia fissata una certa localita' e una certa data deve poter visualizzare i viaggi che la comprendono nel proprio itinerario . L'agenzia inoltre puo' stampare le informazioni di un particolare itinerario e il suo costo.

Definisci un database per gestire il servizio.

Soluzione:

 
modello relazionale Pescatori


1) creare un elenco di tutti i pescatori ordinati (senso crescente) per nominativo

select *
from pescatori
order by nominativo

2) creare un elenco dei pescatori ordinato (senso decrescente) per idpescatore che visualizzi idpescatore, nominativo e il nome

della barca

select idpescatore,nominativo,nomebarca
from pescatori
order by idpescadore DESC

3) visualizzare un elenco delle localita' che abbiano 2 foto , si vuole evidenziare idlocalita' descrizione foto1 foto2 e

ristorante

select idlocalita , descrizione,foto1,foto2,ristorante 
from localita
where foto1 is not null && foto2 is not null

4) trovare tutti i clienti (visualizzarli ordinati per cognome e nome) che hanno il cognome che inizia per R

select cognome,nome,idcliente,telefono,indirizzo
from clienti
where cognome like 'R%'
order by cognome,nome

5) visualizzare tutte le localita' ( idlocalita,descrizione e ristorante) di un itinerario di cui si conosce l'id e' 5

select dlocalita,descrizione,ristorante
from localita join localitaitinerario on localita.idlocalita = localitaitinerario.idlocalita
where localitaitinerario.iditinerario= 5


oppure

select dlocalita,descrizione,ristorante
from localita , localitaitinerario 
where localitaitinerario.iditinerario= 5 AND  localita.idlocalita = localitaitinerario.idlocalita

6) trovare tutti i viaggi che si svolgono fra il 12/1/2016 e il 14/1/2016 ordinati per prezzo il cui capitano sia il signor

marco rossi (nominativo)

select idviaggio,iditinerario,data,prezzo
from viaggi join pescatori on viaggi.idpescatore=pescatori.idpescatore
where nominativo='marco rossi' and  dataviaggio between '12/1/2016' and '14/1/2016'
order by prezzo


7) calcolare del viaggio con id=234 quanti posti sono stati prenotati ( calcolarlo mediante le prenotazioni effettuate)

select sum(persone)
from prenotazioni
where idviaggio=234

commenta la presenza della voce posti prenotati nella tabella viaggi

8) calcolare quante prenotazioni ha fatto il signor marco rossi (pensiamo sia l'unico cliente con questo nome)

select count(*)
from prenotazioni join clienti on prenotazioni.idcliente = clienti.idcliente
where cognome='rossi' and nome='marco'

9) per ogni pescatore calcolare quanti sono stati i viaggi svolti nel mese di gennaio 2013

select idpescatore, count(*)
from viaggi
where dataviaggio between '1/1/2013' and '31/1/2013'
group by idpescatore

10) visualizza il viaggio ( con tutte le informazioni) piu' costoso di oggi

select top 1 *
from viaggi
where dataviaggio= now()
order by costo

11) visualizza tutti i viaggi che si svolgono il 2/3/2016 e che hanno fra le localita' del loro itinerario "boccasette" (

boccasette e' una parola presente nella descrizione della localita'

select idviaggio, iditinerario
from viaggi,itinerario,localitaitinerario,localita
where viaggi.iditinerario=itinerario.iditinerario and itinerario.iditinerario=localitaitinerario.iditinerario and
      localitaitinerario.idlocalita = localita.idlocalita and localita.descrizione like '%boccasette%
      and viaggi.dataviaggio='2/3/2016' 

12) trova il nominativo del pescatore piu' anziano

select nominativo
from pescatori
where datanascita = ( select min(datanascita)
                     from pescatori
                    )

13) visualizza tutti i clienti con i posti prenotati da ciascuno per il viaggio 345 (evidenzia lo stato del pagamento)

select idcliente,cognome,nome, persone,pagato
from clienti,prenotazioni
where clienti.idcliente=prenotazioni.idcliente AND idviaggio=345

14) si vuole stampare il percorso (localita dopo localita) di un particolare itinerario discuti del problema che sorge nel

ottenere questa informazione e indica il rimedio

15) visualizza ogni pescatore che ha visto salire a bordo il cliente 1234 un numero di volte maggiore di 3

select idpescatore
from prenotazioni,viaggi
where prenotazioni.idviaggio = viaggi.idviaggio and idcliente= 1234
group by idpescatore
having count(*)> 3

16) visualizza tutti i dati di un cliente il cui id viene scelto al momento dell'interrogazione

select *
from clienti
where idcliente=[inserisci id cliente]