Basi di Dati Esercitazione SQL 17 Novembre 2014
Esercitazione Basi di Dati2 Fornitori (CodiceFornitore, Nome, Indirizzo, Città) Prodotti (CodiceProdotto, Nome, Marca, Modello) Catalogo (Fornitore, Prodotto, Costo) con vincoli di integrità referenziale fra Prodotto e la chiave di Prodotti fra Fornitore e la chiave di Fornitori 1.Trovare Nome, Marca e Modello dei prodotti acquistabili con meno di 2000 €. 2.Trovare i nomi dei fornitori che distribuiscono prodotti IBM (IBM è la marca di un prodotto). 3.Trovare i codici di tutti i prodotti che sono forniti da almeno due fornitori. 4.Trovare i codici dei fornitori che distribuiscono tutti i prodotti presenti nel catalogo. 5.Trovare i nomi dei fornitori che forniscono tutti i prodotti IBM presenti nel catalogo. 6.Trovare il costo medio dei prodotti forniti in ciascuna città (visualizzare costo e città).
Esercitazione Basi di Dati3 Le Relazioni Fornitori NomeCodiceFornitoreIndirizzoCittà Ladroni001Via OstenseRoma Risparmietti002Viale MarconiRoma Teloporto010Via RomaMilano CodiceProdottoNomeMarcaModello 0001NotebookIBM390 x 0002DesktopIBM DesktopACER730 Prodotti Catalogo FornitoreProdottoCosto € € € € € € € 2.000
Esercitazione Basi di Dati4 1.Trovare Nome, Marca e Modello dei prodotti acquistabili con meno di 2000 €. Esercizio 1.1 Fornitori (CF, Nome, Indirizzo, Città) Prodotti (CP, Nome, Marca, Modello) Catalogo (F, P, Costo)
Esercitazione Basi di Dati5 1.Trovare Nome, Marca e Modello dei prodotti acquistabili con meno di 2000 €. Nome, Marca, Modello ( Costo < 2000 (Prodotti ⋈ CP=P Catalogo)) Esercizio 1.1 Fornitori (CF, Nome, Indirizzo, Città) Prodotti (CP, Nome, Marca, Modello) Catalogo (F, P, Costo)
Esercitazione Basi di Dati6 select * From prodotti, catalogo Where codiceProdotto = prodotto Esercizio 1.1
Esercitazione Basi di Dati7 select * From prodotti, catalogo Where codiceProdotto = prodotto and costo < 2000 Esercizio 1.1
Esercitazione Basi di Dati8 Select distinct nome, marca, modello From prodotti, catalogo Where codiceProdotto = prodotto and costo < 2000 Esercizio 1.1
Esercitazione Basi di Dati9 2.Trovare i nomi dei fornitori che distribuiscono prodotti IBM (IBM è la marca di un prodotto). Nome ( Marca =‘IBM’ ((Fornitori ⋈ CF=F Catalogo) ⋈ P=CP ( CP,Marca (Prodotti)) ) Esercizio 1.2 Fornitori (CF, Nome, Indirizzo, Città) Prodotti (CP, Nome, Marca, Modello) Catalogo (F, P, Costo)
Esercitazione Basi di Dati10 Select * From prodotti, catalogo, fornitori Where codiceProdotto = prodotto and fornitore = codiceFornitore Esercizio 1.2
Esercitazione Basi di Dati11 Select * From prodotti, catalogo, fornitori Where codiceProdotto = prodotto and fornitore = codiceFornitore and marca ='IBM' Esercizio 1.2
Esercitazione Basi di Dati12 Select distinct fornitori.nome From prodotti, catalogo, fornitori Where codiceProdotto = prodotto and fornitore = codiceFornitore and marca ='IBM' Esercizio 1.2
Esercitazione Basi di Dati13 3.Trovare i codici di tutti i prodotti che sono forniti da almeno due fornitori. P ( F F’ ( Catalogo ⋈ P=P’ X’←X (Catalogo)) X’←X indica una ridenominazione in cui ciascun attributo A viene cambiato in A’ Esercizio 1.3 Fornitori (CF, Nome, Indirizzo, Città) Prodotti (CP, Nome, Marca, Modello) Catalogo (F, P, Costo)
Esercitazione Basi di Dati14 Select * From catalogo c1, catalogo c2 Where c1.prodotto = c2.prodotto Esercizio 1.3
Esercitazione Basi di Dati15 Select * From catalogo c1, catalogo c2 Where c1.prodotto = c2.prodotto c1.fornitore != c2.fornitore Esercizio 1.3
Esercitazione Basi di Dati16 Select distinct c1.prodotto From catalogo c1, catalogo c2 where c1.prodotto = c2.prodotto c1.fornitore != c2.fornitore Esercizio 1.3
Esercitazione Basi di Dati17 Esercizio Trovare i codici dei fornitori che distribuiscono tutti i prodotti presenti nel catalogo. F (Catalogo) - F (( F (Catalogo) ⋈ P (Catalogo)) – F,P (Catalogo) ))
Esercitazione Basi di Dati18 F (Catalogo) - Fornitura Mancate Select distinct fornitore From catalogo Esercizio 1.4
Esercitazione Basi di Dati19 F (Catalogo) ⋈ P (Catalogo) Fornitore Prodotto ⋈ ProdottoFornitore Tutte le coppie Fornitore/Prodotto Esercizio 1.4
Esercitazione Basi di Dati20 F (Catalogo) ⋈ P (Catalogo) – F,P (Catalogo) ProdottoFornitore Tutte le coppie Fornitore/Prodotto – Fornitore/Prodotto ProdottoFornitore Le forniture mancate Esercizio 1.4
Esercitazione Basi di Dati21 Fornitura Mancate Select c1.fornitore, c2.prodotto From catalogo c1, catalogo c2 Except Select fornitore, prodotto From catalogo Esercizio 1.4
Esercitazione Basi di Dati22 Fornitura Mancate create view fornituraMancante as select c1.fornitore, c2.prodotto from catalogo c1, catalogo c2 except select fornitore, prodotto from catalogo Esercizio 1.4
Esercitazione Basi di Dati23 F (Catalogo) - Fornitura Mancate Select distinct fornitore From catalogo Esercizio 1.4 select fornitore from fornituraMancante except -
Esercitazione Basi di Dati24 Esercizio Trovare i codici dei fornitori che distribuiscono tutti i prodotti presenti nel catalogo. F (Catalogo) - F (( F (Catalogo) ⋈ P (Catalogo)) – F,P (Catalogo) )) select distinct fornitore from catalogo c1 where not exists (select * from catalogo c2 where not exists (select * from catalogo c3 where c2.prodotto = c3.prodotto and c1.fornitore = c3.fornitore))
Esercitazione Basi di Dati25 5.Trovare i nomi dei fornitori che forniscono tutti i prodotti IBM presenti nel catalogo. La soluzione è identica a quella della interrogazione 4, con, al posto della relazione Catalogo la vista catalogoIBM : CatalogoIBM := P,F ( Marca=’IBM’ (Catalogo ⋈ P=CP Prodotti)) Esercizio 1.5
Esercitazione Basi di Dati26 Esercizio 1.5 create view catalogoIBM as select prodotto, fornitore from catalogo, prodotti where prodotto = codiceProdotto and marca = ‘IBM’
Esercitazione Basi di Dati27 Esercizio 1.5 create view fornituraMancanteIBM as select c1.fornitore, c2.prodotto from catalogoIBM c1, catalogoIBM c2 except select fornitore, prodotto from catalogoIBM
Esercitazione Basi di Dati28 Trovare il costo medio dei prodotti forniti in ciascuna città (visualizzare costo e città). Esercizio 1.6 Fornitori (CodiceFornitore, Nome, Indirizzo, Città) Prodotti (CodiceProdotto, Nome, Marca, Modello) Catalogo (Fornitore, Prodotto, Costo) con vincoli di integrità referenziale fra Prodotto e la chiave di Prodotti fra Fornitore e la chiave di Fornitori
Esercitazione Basi di Dati29 Trovare il costo medio dei prodotti forniti in ciascuna città (visualizzare costo e città). SELECT * FROM catalogo AS C, fornitori AS F WHERE C.fornitore = F.codiceFornitore Esercizio 1.6
Esercitazione Basi di Dati30 Esercizio 1.6 Trovare il costo medio dei prodotti forniti in ciascuna città (visualizzare costo e città). SELECT avg(costo) AS CostoMedio, F.citta FROM catalogo AS C, fornitori AS F WHERE C.fornitore = F.codiceFornitore GROUP BY F.citta