1. Esercizio
Dato il seguente schema relazionale:
AUTO(TARGA, MARCA, MODELLO, ANNO_IMMATRICOLAZIONE)
OFFICINA(CODO, DESCRIZIONE, CITTA)
REVISIONE(TARGA, CODO, ANNO, COSTO)
FK: TARGA REFERENCES AUTO
CODO REFERENCES OFFICINA
Si richiede di scrivere in SQL le seguenti interrogazioni:
1) Selezionare le città in cui nessuna officina ha revisionato auto di marca ‘FIAT’ nel 2004;
2) Selezionare le città nelle quali sono state effettuate revisioni (almeno una) di auto di marca
‘Ferrari’ ad un costo inferiore ai 200 EURO;
3) Selezionare le officine che si trovano in una città in cui sono state revisionate auto di marca
‘BMW’;
4) Selezionare i modelli di marca ‘BMW’ immatricolati nel 2003 che non sono stati revisionati a
‘Modena’ (o mai revisionati);
5) Selezionare l’incasso totale complessivo che le officine di Modena hanno realizzato grazie alle
revisioni del 2004 su auto di marca ‘FIAT’;
6) Selezionare le marche delle auto che sono state revisionate nelle officine di Reggio Emilia nel
2006
7) Selezionare la targa della vettura la cui revisione ha avuto costo massimo
8) Contare le revisione che sono state effettuate a Modena nel 2006
2. 1) Selezionare le città in cui nessuna officina ha revisionato auto di marca ‘FIAT’ nel 2004;
SELECT DISTINCT CITTA
FROM OFFICINA
WHERE CITTA NOT IN (SELECT CITTA
FROM OFFICINA O,
REVISIONE R,
AUTO A
WHERE O.CODO = R.CODO
AND R.TARGA = A.TARGA
AND A.MARCA = ‘FIAT’
AND R.ANNO = 2004)
2) Selezionare le città nelle quali sono state effettuate revisioni (almeno una) di auto di marca ‘Ferrari’
ad un costo inferiore ai 200 EURO;
SELECT DISTINCT O.CITTA
FROM OFFICINA O,
AUTO A,
REVISIONE R
WHERE O.CODO = R.CODO
AND A.TARGA = R.TARGA
AND A.MARCA = ‘Ferrari’
AND R.COSTO < 200
3) Selezionare le officine che si trovano in una città in cui sono state revisionate auto di marca ‘BMW’;
SELECT *
FROM OFFICINA
WHERE CITTA IN (SELECT O.CITTA
FROM OFFICINA O,
AUTO A,
REVISIONE R
WHERE O.CODO = R.CODO
AND A.TARGA = R.TARGA
AND A.MARCA = ‘BMW’)
3. 4) Selezionare i modelli di marca ‘BMW’ immatricolati nel 2003 che non sono stati revisionati a
‘Modena’ (o mai revisionati);
SELECT DISTINCT A.MODELLO
FROM AUTO A
WHERE A.ANNO_IMMATRICOLAZIONE = 2003
AND A.MARCA = ‘BMW’
AND MODELLO NOT IN (SELECT A1.MODELLO
FROM OFFICINA O, AUTO A1,REVISIONE R
WHERE O.CODO = R.CODO
AND A1.TARGA = R.TARGA
AND O.CITTA = ‘Modena’)
5) Selezionare l’incasso totale complessivo che le officine di Modena hanno realizzato grazie alle
revisioni del 2004 su auto di marca ‘FIAT’.
SELECT SUM(COSTO)
FROM OFFICINA O, AUTO A, REVISIONE R
WHERE O.CODO = R.CODO
AND A.TARGA = R.TARGA
AND O.CITTA = ‘Modena’
AND R.ANNO = 2004
AND A.MARCA = ‘FIAT’
6) Selezionare le marche delle auto che sono state revisionate nelle officine di Reggio Emilia nel 2006.
SELECT A. MARCA
FROM OFFICINA O,AUTO A, REVISIONE R
WHERE O.CODO = R.CODO
AND A.TARGA = R.TARGA
AND O.CITTA = ‘Reggio Emilia’
AND R.ANNO = 2006
7) Selezionare la targa della vettura la cui revisione ha avuto costo massimo.
SELECT TARGA
FROM REVISIONE
WHERE COSTO IN (SELECT MAX(COSTO)
FROM REVISIONE)
8) Contare le revisione che sono state effettuate a Modena nel 2006.
SELECT Count(*)
FROM OFFICINA O, REVISIONE R
WHERE O.CODO = R.CODO
AND O.CITTA = ‘Modena’
AND R.ANNO = 2006