COGNOME e Nome_________________________ LOGIN sul PC_________________________________________
Basi di Dati
Prova di SQl del 24-02-2015
Viene valutato quanto memorizzato su file (denominare il file COGNOME.sql)
Facendo riferimento allo schema del database PROVA, scrivere la query SQL corrispondenti alle seguenti
interrogazioni:
1) Elencare per tutti i fornitori, il codice, il nome, la città, il numero totale di forniture NNTF, la somma totale delle
quantità fornite NSTF, il numero totale di prodotti NNTP e parti NNTPA e, per chi non avesse nessuna fornitura,
stampare la stringa “na” al posto del valore per NNTF, NSTF, NNTP, NNTPA (suggerimento: utilizzare una tabella
temporanea).
select TEMP.cod, TEMP.nome, TEMP.CITTA, case when TEMP.NTF=0 then na else TEMP.NTF end as NNTF,
coalesce(TEMP.STF,na) as NSTF, case when TEMP.NTP=0 then na else TEMP.NTP end as NNTP,
case when TEMP.NTPA=0 then na else TEMP.NTPA end as NNTPA
from
(select cod,nome,citta,count(FT.fcod) as NTF,sum(quantita) as STF, count(distinct FT.prcod) as NTP, count(distinct pcod) as NTPA
from fornitori F left outer join forniture FT on F.cod=FT.fcod
group by cod,nome,citta,FT.fcod)
as TEMP
2) Contare le triplette distinte di citta associate alle forniture, cioè la tripletta della citta del fornitore,
della parte e del prodotto (ex MILANO, TORINO,ROMA,3). Produrre un risultato con il
seguente schema:
CITTA_FO
FIRENZE
MILANO
MODENA
MODENA
MODENA
PARMA
PARMA
PAVIA
ROMA
TORINO
VENEZIA
VENEZIA
VENEZIA
VENEZIA
CITTA_PA
TORINO
ROMA
MILANO
PAVIA
PAVIA
ROMA
ROMA
GENOVA
MILANO
MILANO
MILANO
PAVIA
ROMA
ROMA
CITTA_PR
MILANO
TORINO
PAVIA
FIRENZE
ROMA
FIRENZE
MILANO
TORINO
TORINO
ROMA
ROMA
TORINO
MILANO
TORINO
CONTEGGIO
1
3
1
1
1
1
1
1
1
2
1
1
1
1
Non considerare le permutazioni.
select f.citta as CITTA_FO,p.citta as CITTA_PA,pr.citta as CITTA_PR,count(*) as Conteggio
from fornitori F join forniture FT on F.cod=FT.fcod
join parti P on P.cod=ft.pcod
join prodotti PR on PR.cod=FT.prcod
where f.citta<>p.citta and p.citta<>pr.citta and pr.citta<>f.citta
group by f.citta,p.citta,pr.citta
order by f.citta,p.citta,pr.citta