Si Clienti(codice,nome,indirizzo,p_iva) scriva il SQL che definisce il seguente schema relazionale Prodotti(codice,nome,descrizione,prezzo) SQL: definizione schema Fatture(codice,cliente,data) RigheFattura(codice,fattura,prodotto,quantità,prezzo) Vincoli RigheFattura.fattura-> RigheFattura.prodotto-> Fatture.cliente-> integritàreferenziale Cliente.nome Fatture.codice Prodotti.codice 1 CREATE Schema relazionale con vincoli codice SCHEMA fatture nome TABLE clienti( in varchar(20) serial forma PRIMARY NOT KEY, NULL, grafica CREATE indirizzo p_ivachar(11) TABLE varchar(40) prodotti( unique) NOT NULL, codice nome descrizione prezzo varchar(20) serial decimal(8,2) varchar(256) PRIMARY NOT NOT KEY, NULL, NOT NULL) NULL, 2
CREATE codice cliente Schema relazionale con vincoli data TABLE serial fatture( PRIMARY KEY, in date integernot NULL REFERENCES Clienti(codice), forma NULL) grafica CREATE codice fattura prodotto TABLE serial RigheFattura( quantitàintegernot PRIMARY NULL KEY, prezzo decimal(8,2)) integernot NULL, REFERENCES Fatture(codice), Prodotti(Codice), 3 1.Ricercare Date implementi tabelle le seguenti precedentemente interrogazioni definite, si scriva il codice SQL che 2.Ricercare fattura, il nome del prodotto acquistati e il prezzo da pippo, come mostrando da fatturala data della 3.Calcolare prodotto, cura visualizzare la tutti data i prodotti della anche fattura con i prodotti le e rispettive il prezzo che non fatture, a cu sono èstato mostrando mai venduto stati venduti il nome e avendo del 4.Visualizzare tutte ogni le fatture. il totale Supponendo delle vendite che sommando l azienda guadagni il prezzo di all incirca tutte lerighe il 10% di totale vendita ottenuto per si calcoli sommando ogni fattura, anche il il prezzo il guadagno codice, associato la atteso. data, a il ciascuna numero riga dirighe e il su 4
5.Ripetere 6.Visualizzare sono visualizzando l interrogazione il nome di ogni precedente cliente ordinando il numero i dati totale per di data. fatture state emesse includendo nel conto solo le del fatture 2009, che gli SQL: per nome solo Interrogazioni del i clienti cliente. che hanno almeno 3 fatture e ordinando le 5 SELECT SQL: fatture.data, Interrogazioni FROM WHERE clienti, clienti.codice=fatture.cliente fatture.codice=righefatture.fattura fatture, righefatture, prodotti.nome, prodotti righefatture.prezzo AND righefatture.prodotto=prodotti.codice clienti.nome='pippo' 1.Ricercare tutti i prodotti acquistati da pippo, mostrando la data della fattura, il nome del prodotto e il prezzo come da fattura 6
2.Ricercare del avendo venduti prodotto, cura tutti di la i visualizzare prodotti data della con fattura anche le rispettive e i prodotti il prezzo fatture, che a cu non mostrando èstato sono venduto mai il nome stati e SELECT FROM prodotti LEFT fatture.data, ON JOIN LEFT righefatture.prodotto=prodotti.codice JOIN prodotti.nome, ON fatture.codice=righefatture.fattura righefatture.prezzo 7 3.Calcolare le vendita fatture. il Supponendo totale delle vendite che l azienda sommando guadagni il prezzo all incirca di tutte il 10% lerighe su ogni di tutte SELECT si calcoli anche il guadagno atteso. FROM sum(righefatture.prezzo)*0.1 AS "Totale AS "Guadagno vendite, atteso" 8
4.Visualizzare ottenuto SELECT sommando per ogni il fattura, prezzo il associato codice, la a data, ciascuna il numero rigadirighe e il totale FROM WHERE fatture.codice, sum(righefatture.prezzo) fatture.data, GROUP righefatture, BY righefatture.fattura=fatture.codice fatture.codice, fatture.data AS "Totale fattura" 9 5.Ripetere SELECT fatture.codice, l interrogazione precedente ordinando i dati per data. SQL: sum(righefatture.prezzo) fatture.data, Interrogazioni FROM WHERE GROUP righefatture, righefatture.fattura=fatture.codice fatture.codice, fatture.data AS "Totale fattura" ORDER BY fatture.data 10
6.Visualizzare sono visualizzando fatture state emesse il solo nome i includendo clienti di ogni che cliente hanno nel conto almeno il solo numero le 3 fatture totale e del di ordinando fatture 2009, che le gli SELECT per nome del cliente. FROM WHERE clienti, clienti.nome, count(*) AS "Numero righe" GROUP HAVING fatture.cliente=clienti.codice ORDER BY AND count(*) clienti.nome date_part('year',fatture.data)=2009 >1 11