Esercizio no.10:soluzione
Per comodità indichiamo:
I=immobile
A=affitto
L=locatario
S=spesa

Decidiamo dunque, di implementare lo schema concettuale indicato.
Le query di creazione e i valori di test contenuti nelle tabelle
sono i seguenti:
CREATE TABLE I( idI COUNTER PRIMARY KEY, tipo CHAR(1), luogo CHAR(20)); |
|
CREATE TABLE L( idL COUNTER PRIMARY KEY, cog CHAR(20)); |
|
CREATE TABLE A( idA COUNTER PRIMARY KEY, ratax INTEGER, durata INTEGER, xidI INTEGER REFERENCES I(idI), xidL INTEGER REFERENCES L(idL) ); |
|
CREATE TABLE S( idS COUNTER PRIMARY KEY, spesa INTEGER, data DATE, xidA INTEGER REFERENCES A(idA) ); |
|
Passiamo a risolvere le query di interrogazione:
q1:Visionare tutti i locatari che hanno un contratto > 2 anni. |
||||
SELECT DISTINCT L.cog
FROM L, A WHERE L.idL=A.xidL AND A.durata>2; |
|
q2:Dire quanti immobili sono affittati per ogni città. |
|||||||||
SELECT luogo, COUNT(luogo)
AS TOTALE FROM I GROUP BY luogo; |
|
q3:Individuare un contratto di affitto dopo il mancato pagamento di tre rate non pagate. |
|||
SELECT L.cog FROM L, A WHERE L.idL=A.xidL AND A.ratax>=3; |
|
q4:Visionare tutte le spese effettuate dal locatario Rossi effettuate nel 2007. |
|||
SELECT SUM(S.spesa) FROM S, A, L WHERE A.idA=S.xidA AND L.idL=A.xidL AND L.cog='rossi'; |
|
q5:Dire in che data Bianchi ha eseguito lavori per un importo maggiore di 3500€. |
|||||
SELECT S.data, S.spesa
FROM S, A, L WHERE L.idL=A.xidL AND A.idA=S.xidA AND L.cog='bianchi' AND S.spesa>1000; |
|
q6:Calcolare le spese registrate in un anno per tutti gli immobili, suddivisi per città. |
|||||||
SELECT DISTINCT I.luogo,
SUM(S.spesa) FROM I, A, S WHERE I.idI=A.xidI AND A.idA=S.xidA GROUP BY I.luogo; |
|
q7:Dire quanti uffici,negozi,appartamenti ci sono nel database |
|||||||||
SELECT DISTINCT tipo,
COUNT(tipo) FROM I GROUP BY tipo; |
|