COGNOME e Nome_________________________ LOGIN sul PC_________________________________________
Basi di Dati
Prova di SQl del 24-01-2017
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 distinto di prodotti NPS nelle spedizioni nelle quali
il fornitore ha almeno due prodotti diversi. Se la città del fornitore non è nota, stampare al suo posto la stringa “Città
indefinita”.
select fornitori.cod,coalesce(citta,Città indefinita) as citta, nome as nome,
count(distinct prcod) as NPS
from fornitori join sped_dettagli on cod=fcod
where fcod in (select distinct fcod
from sped_dettagli
group by fcod,spcod
having count(distinct prcod) >1)
group by cod,citta,nome
cod
F001
F003
F004
F116
F313
F314
F315
citta
MILANO
MILANO
ROMA
VENEZIA
TORINO
Città indefinita
FIRENZE
nome
ROSSI
BIANCHI
DONATI
GILARDI
MOSCONI
ANDREI
MONTELATICI
NPS
3
4
2
4
2
2
2
2) Produrre una tabella che riporti, per ogni prodotto che compare in una spedizione, il numero di volte in cui la città del
prodotto è diversa dalla città di destinazione NCD e dalla città di partenza NCP(separatamente). Elencare il codice del
prodotto, NCD e NCP (opzionale, elencare tutti gli attributi del prodotto, NCD e NCP)
codice
PR01
PR03
PR04
PR05
PR06
PR07
PR08
PR58
nome
TASTIERA_IBM
SCHEDA_PC
SCHEDA_COMP
XT_IBM
M24
AT_IBM
MAC
NOKIA_SET
città
TORINO
MILANO
ROMA
ROMA
TORINO
PAVIA
TORINO
FIRENZE
NCD
4
2
2
2
1
4
2
1
NCP
3
2
1
2
1
3
2
2
select Prodotti.*, NCD, NCP
from
(select prcod,count(distinct cittadest) as
from spedizioni natural join sped_dettagli
where prodotti.citta<>cittadest
part group by prcod) as UNO
natural join
(select prcod,count(distinct cittapart) as
from spedizioni natural join sped_dettagli
where prodotti.citta<>cittapart
group by prcod) as DUE
join prodotti on prcod=cod
NCD
join prodotti on prcod=cod
NCP
join prodotti on prcod=cod