Beruflich Dokumente
Kultur Dokumente
12/05/2011
Gianluca Gippetto - Universit degli studi di Palermo
Museo(Codice,Nome,Via,Citt,Direttore)
Sala(CodiceMuseo,NumSala,NumOpere,Superficie,NumPorte,Guardiano)
Umidit(CodiceMuseo,NumSala,Data,Ora,PercUmidit)
Opera(Codice,NomeOpera,Autore,DataAcquisto,PerMaxUmidit,CodiceMuseo,NumSala)
Personale(CF,Nome,DataAssunzione)
Esercizio 1
Elencare CF e Nome del personale (direttori e guardiani) che lavora in un museo di
Mantova.
CF,M.Nome M.NomeNome Citt=Mantova (Museo) 1Direttore=CF Personale
CF,M.Nome M.NomeNome Citt=Mantova (Museo)
1Codice=CodiceMuseo Sala 1Guardiano=CF Personale
-- Versione 1
select CF, Nome
from Museo M join Personale P
on(M.direttore = P.CF)
where M.Citta = Mantova
UNION
select CF, Nome
from Sala S, Museo M, Personale P
where M.Citta = Mantova and
S.CodiceMuseo = M.Codice and
S.Guardiano = P.CF
-- Versione 2
Con il contributo di Davide Guastella, che ringrazio per aver scritto (in LATEX!) linterrogazione
dellesercizio 2 in algebra relazionale.
1
Select CF, Nome
from Personale
where CF in (Select direttore
from Museo
where citta = Mantova)
or in (Select guardiano
from Museo M join Sala S on(M.codice = S.codiceMuseo)
where citta = Mantova)
Esercizio 2
Indicare il museo (o i musei) nel quale situata la sala con percentuale di umidit
minima. 1
La soluzione data da
Raux 1codMuseo=Codice Museo
In sostanza, per individuare le sale con percentuale di umidit minima:
1. si eseguito un self join di Umidit;
2. si sono selezionate tutte le sale per cui esiste unaltra sala con percentuale di
umidit minore: le uniche sale che non soddisfano tale propriet sono proprio
quelle con percentuale di umidit minima;
3. dallinsieme di tutte le sale si sono sottratte quelle ottenute nella precedente
selezione: per quanto detto al punto 2, le uniche sale rimaste sono quelle con
percentuale di umidit minima.
Esercizio 3
Elencare i musei le cui sale ospitano tutte almeno 3 opere.
codiceMuseo,Nome (Museo) \
codiceMuseo,Nome numOpere<3 (Sala) 1codiceMuseo=codice (Museo)
1
Mi sono permesso di aggiungere (o i musei) al testo originale dellesercizio: in linea di principio,
potrebbero esistere due o pi sale, di musei diversi, con la stessa percentuale di umidit minima.
2
-- Versione 1
select Codice, Nome
from Museo
where Codice not in (select CodiceMuseo
from Sala
where numOpere<3)
-- Versione 2
select Codice, Nome
from Museo
EXCEPT
select Codice, Nome
from Museo M join Sala S
on(M.Codice = S.CodiceMuseo)
where numOpere<3
Esercizio 4
Elencare il nome e la data di acquisto delle opere collocate in sale senza guardiano.
NomeOpera,DataAcquisto Guardiano=null (Sala) 1 Opera
select NomeOpera,DataAcquisto
from Opera O, Sala S -- Luso di natural join e sconsigliato
where Guardiano = null and
O.CodiceMuseo = S.codiceMuseo and
O.NumSala = S.NumSala
Esercizio 5
Per ogni museo, indicare qual la percentuale di umidit minima fra quelle delle sue
sale.
select M.Codice, M.Nome, S.PercUmidita
from Museo M join Sala S
on(M.Codice = S.CodiceMuseo)
where S.PercUmidita = (select min(PercUmidita)
from Sala
where CodiceMuseo = M.Codice)
Esercizio 6
Per ogni museo, indicare la sala con percentuale di umidit minima.
/* Dobbiamo appoggiarci ad una vista creata a
partire dalla query dellesercizio 5 */
create view UmiditaMinMuseo (codiceMuseo,nomeMuseo,minPercUmidita)
as <Query Esercizio 5>
3
select M.codice, numSala as Sala_con_percUmidita_minima
from UmiditaMinMuseo M join Sala S
on(M.codiceMuseo = S.codiceMuseo)
where minPercUmidita = S.percUmidita
Esercizio 7
Indicare i nomi dei musei che hanno pi di 20 sale.
select M.codice, M.nome
from Museo M join Sala S
on(M.codice = S.codiceMuseo)
group by M.codice
having count(*)>20