Concetti Chiave

  • Le query SQL forniscono informazioni dettagliate sui clienti e le loro prenotazioni, consentendo l'analisi di dati specifici come la camera 237 e l'età dei clienti.
  • Le interrogazioni permettono di visualizzare le prenotazioni effettuate da clienti di una specifica città, come Gotham City, e di filtrare i clienti in base all'acconto versato.
  • Viene fornita la possibilità di identificare alberghi e clienti sulla base della durata delle prenotazioni, oltre a calcolare gli acconti superiori alla media.
  • Le query relative alle auto analizzano il numero di veicoli assicurati per ogni compagnia e identificano quelli coinvolti in più sinistri, con dettagli sui danni.
  • Altre interrogazioni servono a individuare i proprietari di più veicoli e a escludere auto non coinvolte in sinistri recenti, fornendo una panoramica completa delle informazioni automobilistiche.

Date le tabelle:

Clienti (Cod_cli, Cognome, Nome, Citta, Salario, Eta)

Prenot (Cod_cli, Cod_alb, Camera, Giorni, Acconto, DataIn, DataOut)

Alberghi (Cod_alb, Nome, Citta, Totale_camere)

Scrivere le interrogazioni SQL che restituiscono le seguenti informazioni:

1) Visualizzare tutti i dati dei clienti che hanno una prenotazione per la camera 237

Chi sono i clienti con prenotazione camera 237?

SELECT clienti.*

FROM clienti,prenot

WHERE clienti.cod_cli=prenot.cod_cli

AND camera=”237”;

2) Visualizzare tutti i dati dei clienti e delle relative prenotazioni per tutti coloro che hanno età compresa fra 25 e 40 anni

SELECT *

FROM clienti, prenot

WHERE clienti.cod_cli=prenot.cod_cli

AND eta>25 AND eta

3) Visualizzare tutti i dati delle prenotazioni effettuate da clienti che risiedono a Gotham City

Prenotazioni da Gotham City

SELECT prenot.*

FROM clienti, prenot

WHERE codice=cod_cli

AND citta=”GothamCity”;

4) Visualizzare cognome, nome, acconto e camera dei clienti che hanno versato un acconto superiore a 100.000 e che hanno più di 25 anni
SELECT cognome, nome, acconto, camera

FROM clienti, prenot

WHERE clienti.cod_cli=prenot.cod_cli

AND prenot.acconto>100000

AND clienti.eta>25;

5) Per ogni albergo visualizzare cognome, nome e città dei clienti che hanno versato un acconto superiore alla media

Acconti superiori alla media

SELECT alberghi.nome, clienti.cognome, clienti.nome, clienti.citta

FROM clienti, prenot, alberghi

WHERE clienti.cod_cli = prenot.cod_cli

AND prenot.cod_alb = alberghi.cod_alb

AND prenot.acconto > SELECT (AVG(acconto) FROM prenot);

6) Visualizzare nome dell’albergo, cognome, nome e città di residenza dei 5 clienti che hanno prenotato per i periodi più lunghi

Prenotazioni più lunghe

SELECT TOP 5 alberghi.nome, clienti.cognome, clienti.nome, clienti.citta

FROM clienti, prenot, alberghi

WHERE clienti.cod_cli = prenot.cod_cli

AND prenot.cod_alb = alberghi.cod_alb

ORDER BY prenot.giorni DESC;

7) Per ogni albergo, visualizzare cognome, nome e città dei clienti che hanno versato un acconto superiore alla media di quell’albergo
SELECT alberghi.nome, clienti.cognome, clienti.nome, clienti.citta

FROM clienti, acconti, prenot, alberghi

WHERE clienti.cod_cli=prenot.cod_cli

AND prenot.cod_alb=acconti.cod_alb

AND prenot.cod_alb=alberghi.cod_alb

AND prenot.acconto >= SELECT (cod_alb, AVG(acconto) AS media FROM prenot GROUP BY cod_alb);

8) Visualizzare cognome nome e salario dei clienti che abitano in città che contengono almeno 2 clienti

Clienti in città con almeno 2 residenti

SELECT cognome, nome

FROM clienti

WHERE citta IN (SELECT citta

FROM clienti

GROUP BY citta

HAVING COUNT(*) >= 2);

9) Visualizzare i dati di tutti i clienti che sono stati nella camera 237, per ciascun albergo, nell'arco della giornata
SELECT c.*, a.nome

FROM Clienti c, Alberghi a, Prenot p

WHERE p.cod_cli=c.cod_cli and p.cod_alb=a.cod_alb and p.camera = 237

GROUP BY a.nome

Date le tabelle:

Auto (Targa, Marca, Cilindrata, Potenza, CodF*, CodAss*)

Proprietari (CodF, Nome, Residenza)

Assicurazioni (CodAss, Nome, Sede)

Sinistro (CodS, Località, Data)

Autocoinvolte (CodS*, Targa*, ImportoDelDanno)

Scrivere le interrogazioni SQL che restituiscono le seguenti informazioni:

10) Per ciascuna Assicurazione, il nome, la sede ed il numero di auto assicurate

Auto assicurate per assicurazione

SELECT As.Nome, As.Sede, count(*) as NumAuto

FROM Assicurazioni As, Auto Au

WHERE Au.CodAss = As.CodAss

GROUP BY As.CodAss, As.Nome, As.Sede

11) Per ciascuna auto “Fiat”, la targa dell’auto ed il numero di sinistri in cui è stata coinvolta
SELECT A.Targa, count(*) as NumSin

FROM Auto A, AutoCoinvolte AC

WHERE A. Marca=”Fiat” and A.Targa=AC.Targa

GROUP BY A.Targa

12) Per ciascuna auto coinvolta in più di un sinistro, la targa dell’auto, il nome dell’Assicurazione ed il totale dei danni riportati

Auto coinvolte in più sinistri

SELECT Au.Targa, As.Nome, sum(AC.ImportoDelDanno)

FROM AutoCoinvolte AC, Auto Au, Assicurazioni As

WHERE Au.Targa=AC.Targa and Au.CodAss=As.CodAss

GROUP BY Au,Targa, As.Nome

HAVING count(*) >1

13) CodF e Nome di coloro che possiedono più di un’auto
SELECT P.CodF, P.Nome

FROM Proprietari P, Auto A

WHERE P.CodF = A.CodF

GROUP BY P.CodF, P.Nome

HAVING count(*) >1

oppure

SELECT P.CodF, P.Nome

FROM Proprietari P

WHERE 1

FROM Auto A

WHERE P.CodF = A.CodF)

14) La targa delle auto che non sono state coinvolte in sinistri dopo il 20/01/01

Auto non coinvolte in sinistri recenti

SELECT A.Targa

FROM Auto A

WHERE Not Exists ( SELECT *

FROM AutoCoinvolte AC, Sinistri S

WHERE A.Targa =AC.Targa and AC.CodS=S.CodS and

S.Data>20/01/01)

oppure

SELECT A.Targa

FROM Auto A

WHERE A.Targa Not In (SELECT AC.Targa

FROM AutoCoinvolte AC, Sinistri S

WHERE AC.CodS=S.CodS and S.Data>20/01/01

Domande da interrogazione

  1. Quali clienti hanno una prenotazione per la camera 237?
  2. I clienti con una prenotazione per la camera 237 possono essere visualizzati utilizzando la query SQL che unisce le tabelle "clienti" e "prenot" sulla base del codice cliente e filtra per la camera 237.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community