c6es

15
Basi di Dati Esercizi di interrogazioni complesse (II parte)

Upload: majong-devjfu

Post on 05-Dec-2014

764 views

Category:

Travel


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: C6es

Basi di Dati

Esercizi di interrogazioni complesse (II parte)

Page 2: C6es

DB MobiliArticoli (Art_Cod, Cat_Cod, Art_Descrizione, Art_Prezzo, Art_IVA, 

Art_Spese_Trasporto)FK: Cat_Cod REFERENCES Categorie

Categorie (Cat_Cod, Cat_Descrizione)Componenti (Com_Cod, Com_Descrizione, Com_Costo, Lab_Cod)

FK: Lab_Cod REFERENCES LaboratoriLaboratori (Lab_Cod, Lab_Indirizzo, Lab_Citta, Lab_Telefono)Ordini (Ord_Cod, Neg_Cod, Ord_Data)

FK:  Neg_Cod REFERENCES NegoziNegozi (Neg_Cod, Neg_Nome, Neg_Indirizzo, Neg_Citta, Neg_Telefono)CompArt (Art_Cod, Com_Cod, CompArt_Qta)

FK: Art_Cod REFERENCES ArticoliFK: Com_Cod REFERENCES Componenti

OrdArt (Ord_Cod, Art_Cod, OrdArt_Qta)FK: Ord_Cod REFERENCES OrdiniFK: Art_Cod REFERENCES Articoli

2 Esercizi di interrogazioni complesse (II parte)

Page 3: C6es

DB Mobili

Art_CodCat_CodArt_DescrizioneArt_PrezzoArt_IVAArt_Spese_Trasporto

Articoli

Com_CodCom_DescrizioneCom_CostoLab_Cod

Componenti

Ord_CodNeg_CodOrd_Data

Ordini

Neg_CodNeg_NomeNeg_IndirizzoNeg_CittaNeg_Telefono

Negozi

Cat_CodCat_Descrizione

Categorie

Lab_CodLab_IndirizzoLab_CittaLab_Telefono

LaboratoriArt_CodCom_CodCompArt_Qta

CompArt

Ord_CodArt_CodOrdArt_Qta

OrdArt

3 Esercizi di interrogazioni complesse (II parte)

Page 4: C6es

DB Mobili – Query binarieI codici degli ordini del negozio con codice 123 e quelli in cui vengono richiesti più di 10 pezzi dello stesso articolo

SELECT Ord_CodFROM OrdiniWHERE Neg_Cod = '123'

UNIONSELECT Ord_CodFROM OrdArtWHERE OrdArt_Qta > 10

4 Esercizi di interrogazioni complesse (II parte)

Page 5: C6es

DB Mobili – Query nidificateI componenti meno utilizzati nelle composizioni, ovvero che compaiono meno della media nella composizione dei vari articoli

SELECT DISTINCT Com_CodFROM CompArtWHERE CompArt_Qta <

(SELECT AVG(CompArt_Qta)FROM CompArt)

5 Esercizi di interrogazioni complesse (II parte)

Page 6: C6es

DB Mobili – Query nidificateGli articoli per cui non vi sono ordini 

SELECT *FROM ArticoliWHERE NOT EXISTS

( SELECT * FROM OrdArtWHERE OrdArt.Art_Cod = Articoli.Art_Cod)

6 Esercizi di interrogazioni complesse (II parte)

Page 7: C6es

DB Mobili – Query nidificatePer il componente “ANTA”, la differenza rispetto al costo medio dei componenti 

SELECT (Com_Costo ‐(SELECT AVG(Com_Costo)FROM Componenti) ) AS Differenza

FROM ComponentiWHERE Com_Descrizione ='ANTA'

7 Esercizi di interrogazioni complesse (II parte)

Page 8: C6es

DB EsamiS (Matr, SNome, Citta, ACorso)C (CC, CNome, CD)

FK:  CD REFERENCES D

D (CD, CNome, Citta)E (Matr, CC, Data, Voto)

FK: Matr REFERENCES S

FK: CC REFERENCES C

Matr SNome    Citta    Acorso

S

CC CNome CDC

CD CNome CittaD

Matr CC Data    Voto E

8 Esercizi di interrogazioni complesse (II parte)

Page 9: C6es

DB Esami – Query binarieCittà di studenti ma non di docenti 

SELECT Citta FROM SEXCEPTSELECT Citta FROM D

SELECT CittaFROM SWHERE Citta NOT IN ( SELECT Citta

FROM D)

9 Esercizi di interrogazioni complesse (II parte)

Page 10: C6es

DB Esami – Query nidificateStudenti con anno di corso più basso

SELECT *FROM SWHERE ACorso <= ALL (SELECT ACorso

FROM S)

10 Esercizi di interrogazioni complesse (II parte)

Page 11: C6es

DB Esami – Query nidificateNome degli studenti che hanno sostenuto l'esame del corso C323

SELECT SNomeFROM SWHERE Matr IN (SELECT Matr

FROM EWHERE CC='C323')

Questa query è riscrivibile in una query semplice:

SELECT SNomeFROM E,SWHERE E.Matr=S.MatrAND E.CC='C323'

11 Esercizi di interrogazioni complesse (II parte)

Page 12: C6es

DB Esami – Query nidificateNome degli studenti che non hanno sostenuto l'esame del corso C323

SELECT SNomeFROM SWHERE Matr NOT IN (SELECT Matr

FROM EWHERE CC='C323')

SELECT SNomeFROM SWHERE Matr <> ALL (SELECT Matr

FROM EWHERE CC='C323')

12 Esercizi di interrogazioni complesse (II parte)

Page 13: C6es

DB Esami – Query nidificateSELECT SNomeFROM SWHERE NOT EXISTS   (   SELECT *

FROM EWHERE E.Matr=S.MatrAND E.CC='C323')

NOTA: nessuna delle varianti viste è riscrivibile come query semplice. Ad esempio, la seguente query non è equivalente a quelle viste:

SELECT SNomeFROM E,SWHERE E.Matr=S.MatrAND E.CC <> 'C323'

13 Esercizi di interrogazioni complesse (II parte)

Page 14: C6es

DB Esami – Query nidificate (divisione)Studenti che hanno sostenuto tutti gli esami relativi a corsi del docente 624

E’ utile riformulare la query:

Studenti per i quali non esiste alcun corso del docente 624 di cui non hanno sostenuto l'esame 

14 Esercizi di interrogazioni complesse (II parte)

Page 15: C6es

DB Esami – Query nidificate (divisione)Studenti per i quali non esiste alcun corso del docente 624 di cui non hanno sostenuto l'esame

SELECT *FROM SWHERE NOT EXISTS

(SELECT *FROM CWHERE CD='624'AND NOT EXISTS

(SELECT *FROM EWHERE E.Matr=S.MatrAND E.CC=C.CC))

15 Esercizi di interrogazioni complesse (II parte)