Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le...

103
1 Esercizi SQL Monday, January 23, 12

Transcript of Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le...

Page 1: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

1

Esercizi SQL

Monday, January 23, 12

Page 2: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

2

2)AEROPORTO (Città, Nazione, NumPiste)

VOLO (IdVolo, GiornoSett, CittàPart, OraPart, CittàArr, OraArr, TipoAereo)

AEREO (TipoAereo, NumPasseggeri, QtaMerci)

Monday, January 23, 12

Page 3: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

3

Trovare le città da cui partono voli diretti a Roma, ordinate alfabeticamente

Monday, January 23, 12

Page 4: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

3

Trovare le città da cui partono voli diretti a Roma, ordinate alfabeticamente

SELECT CittàParFROM VoloWHERE CittàArr= ‘Roma’ORDER BY CittàPar

Monday, January 23, 12

Page 5: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

3

Trovare le città da cui partono voli diretti a Roma, ordinate alfabeticamente

SELECT CittàParFROM VoloWHERE CittàArr= ‘Roma’ORDER BY CittàPar

Trovare le città con un aeroporto dicui non è noto il numero di piste

Monday, January 23, 12

Page 6: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

3

Trovare le città da cui partono voli diretti a Roma, ordinate alfabeticamente

SELECT CittàParFROM VoloWHERE CittàArr= ‘Roma’ORDER BY CittàPar

Trovare le città con un aeroporto dicui non è noto il numero di piste

SELECT CittàFROM AeroportoWHERE NumPiste IS NULL

Monday, January 23, 12

Page 7: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

4

Di ogni volo misto (merci e passeggeri) estrarre il codice e i dati relativi al trasporto

Monday, January 23, 12

Page 8: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

4

Di ogni volo misto (merci e passeggeri) estrarre il codice e i dati relativi al trasporto

select IdVolo, NumPasseggeri, QtaMercifrom VOLO as V, AEREO as Awhere V.TipoAereo = A.TipoAereo and NumPasseggeri > 0 and QtaMerci > 0

Monday, January 23, 12

Page 9: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

4

Di ogni volo misto (merci e passeggeri) estrarre il codice e i dati relativi al trasporto

select IdVolo, NumPasseggeri, QtaMercifrom VOLO as V, AEREO as Awhere V.TipoAereo = A.TipoAereo and NumPasseggeri > 0 and QtaMerci > 0

(sintassi equivalente)

select IdVolo, NumPasseggeri, QtaMercifrom VOLO V join AEREO A on V.TipoAereo = A.TipoAereowhere NumPasseggeri > 0 and QtaMerci > 0

Monday, January 23, 12

Page 10: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

5

Le nazioni da cui parte e in cui arriva il volo AZ274

Monday, January 23, 12

Page 11: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

5

Le nazioni da cui parte e in cui arriva il volo AZ274

SELECT A1.Nazione, A2.NazioneFROM (AEROPORTO A1 join VOLO on A1.Città=CittàPar) join AEROPORTO A2 on CittàArr=A2.CittàWHERE IdVolo= ‘AZ274’

Monday, January 23, 12

Page 12: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

6

I tipi di aereo e il corrispondente numero di passeggeri per i tipi di aereo usati nei voli che partono da Torino.

Monday, January 23, 12

Page 13: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

6

I tipi di aereo e il corrispondente numero di passeggeri per i tipi di aereo usati nei voli che partono da Torino.

SELECT Volo.TipoAereo, NumPasseggeriFROM VOLO join AEREO on Volo.TipoAereo=Aereo.TipoAereoWHERE CittàPar= ‘Torino’

Monday, January 23, 12

Page 14: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

9

Di ogni nazione, trovare quante piste ha l’aeroporto con più piste (purché le piste siano almeno 3)

Raggruppa tutte le tuple e poi considera solo i gruppi di tuple (a pari nazione) in cui il massimo numero di piste sia almeno 3

Scarta subito tutte e tuple che non abbiano almeno tre piste; poi raggruppa solo quelle, e considera tutti i gruppi à ma chiaramente l’effetto è lo stesso

Monday, January 23, 12

Page 15: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

9

Di ogni nazione, trovare quante piste ha l’aeroporto con più piste (purché le piste siano almeno 3)

SELECT Nazione, max(NumPiste)FROM AEROPORTOGROUP BY NazioneHAVING max(NumPiste) > 2

Raggruppa tutte le tuple e poi considera solo i gruppi di tuple (a pari nazione) in cui il massimo numero di piste sia almeno 3

Scarta subito tutte e tuple che non abbiano almeno tre piste; poi raggruppa solo quelle, e considera tutti i gruppi à ma chiaramente l’effetto è lo stesso

Monday, January 23, 12

Page 16: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

9

Di ogni nazione, trovare quante piste ha l’aeroporto con più piste (purché le piste siano almeno 3)

SELECT Nazione, max(NumPiste)FROM AEROPORTOGROUP BY NazioneHAVING max(NumPiste) > 2

N.B.: per includere nel risultato anche la città bisogna cambiare strategia (non si può inserire l’attributo città nella target list perché non è nella group by) à segue soluzione

Raggruppa tutte le tuple e poi considera solo i gruppi di tuple (a pari nazione) in cui il massimo numero di piste sia almeno 3

Scarta subito tutte e tuple che non abbiano almeno tre piste; poi raggruppa solo quelle, e considera tutti i gruppi à ma chiaramente l’effetto è lo stesso

Monday, January 23, 12

Page 17: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

9

Di ogni nazione, trovare quante piste ha l’aeroporto con più piste (purché le piste siano almeno 3)

SELECT Nazione, max(NumPiste)FROM AEROPORTOGROUP BY NazioneHAVING max(NumPiste) > 2

N.B.: per includere nel risultato anche la città bisogna cambiare strategia (non si può inserire l’attributo città nella target list perché non è nella group by) à segue soluzione

SELECT Nazione, max(NumPiste)FROM AEROPORTOWHERE NumPiste > 2GROUP BY Nazione

Raggruppa tutte le tuple e poi considera solo i gruppi di tuple (a pari nazione) in cui il massimo numero di piste sia almeno 3

Scarta subito tutte e tuple che non abbiano almeno tre piste; poi raggruppa solo quelle, e considera tutti i gruppi à ma chiaramente l’effetto è lo stesso

Monday, January 23, 12

Page 18: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

11

Gli aeroporti da cui partono voli internazionali

Monday, January 23, 12

Page 19: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

11

Gli aeroporti da cui partono voli internazionali

SELECT distinct CittàParFROM (AEROPORTO as A1 join VOLO on CittàPar=A1.Città) join AEROPORTO as A2 on CittàArr=A2.CittàWHERE A1.Nazione <> A2.Nazione

Monday, January 23, 12

Page 20: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

12

Trovare il numero totale di partenze internazionali (del giovedì) da tutti gli aeroporti

Monday, January 23, 12

Page 21: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

12

SELECT count(*)FROM (AEROPORTO as A1 join VOLO on CittàPar=A1.Città) join AEROPORTO as A2 on CittàArr=A2.CittàWHERE A1.Nazione <> A2.Nazione and GiornoSett = ‘Giovedì’

Trovare il numero totale di partenze internazionali (del giovedì) da tutti gli aeroporti

Monday, January 23, 12

Page 22: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

13

Trovare il numero di aeroporti che hanno almeno una partenza internazionale (al giovedì)

Monday, January 23, 12

Page 23: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

13

Trovare il numero di aeroporti che hanno almeno una partenza internazionale (al giovedì)

SELECT count( distinct CittàPar )FROM (AEROPORTO as A1 join VOLO on CittàPar=A1.Città) join AEROPORTO as A2 on CittàArr=A2.CittàWHERE A1.Nazione <> A2.Nazione and GiornoSett = ‘Giovedì’

Monday, January 23, 12

Page 24: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

14

Trovare il numero di partenze internazionali (del giovedì) da ogni aeroporto (per ogni aereoporto vogliamo sapere quanti)

Monday, January 23, 12

Page 25: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

14

Trovare il numero di partenze internazionali (del giovedì) da ogni aeroporto (per ogni aereoporto vogliamo sapere quanti)

SELECT CittàPar, count(*) as NumPartIntFROM (AEROPORTO as A1 join VOLO on CittàPar=A1.Città) join AEROPORTO as A2 on CittàArr=A2.CittàWHERE A1.Nazione <> A2.Nazione and GiornoSett = ‘Giovedì’GROUP BY CittàPar

Monday, January 23, 12

Page 26: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

15

Le città francesi da cui ogni settimana partono più di 20 voli diretti x la Germania e quanti voli per città.

Monday, January 23, 12

Page 27: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

15

Le città francesi da cui ogni settimana partono più di 20 voli diretti x la Germania e quanti voli per città.

SELECT CittàPar, count(*) as NumVoliGerFROM (AEROPORTO as A1 join VOLO on CittàPar=A1.Città) join AEROPORTO as A2 on CittàArr=A2.CittàWHERE A1.Nazione=‘Francia’ AND A2.Nazione= ‘Germania’GROUP BY CittàParHAVING count(*) > 20

Monday, January 23, 12

Page 28: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Inizio Query Annidate

13Monday, January 23, 12

Page 29: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

8

Ad esempio si può usare una query annidata

Trovare l’aeroporto italiano con il maggior numero di piste

Monday, January 23, 12

Page 30: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

8

Ad esempio si può usare una query annidata

select Città, NumPistefrom AEROPORTOwhere Nazione = ‘Italia’ and NumPiste = ( select max(numPiste) from AEROPORTO where Nazione = ‘Italia’ )

Trovare l’aeroporto italiano con il maggior numero di piste

Monday, January 23, 12

Page 31: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

10

Trovare le città in cui si trovano gli aeroporti con più piste di ogni nazione, indicando città, nazione e numero di piste (se si vuole, ancora col vincolo che siano almeno 3)

Monday, January 23, 12

Page 32: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

10

Trovare le città in cui si trovano gli aeroporti con più piste di ogni nazione, indicando città, nazione e numero di piste (se si vuole, ancora col vincolo che siano almeno 3)

SELECT *FROM AEROPORTOWHERE ( Nazione, NumPiste ) IN ( SELECT Nazione, max(NumPiste) FROM AEROPORTO GROUP BY Nazione HAVING max(NumPiste) > 2 )

Monday, January 23, 12

Page 33: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

16

Trovare il # di voli del giovedì di ogni aeroporto da cui partano almeno 100 voli a settimana

Monday, January 23, 12

Page 34: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

16

Trovare il # di voli del giovedì di ogni aeroporto da cui partano almeno 100 voli a settimana

SELECT CittàPart, count(*)FROM VOLOWHERE GiornoSett = ‘Giovedì’GROUP BY CittàPartHAVING count(*) > 100

Monday, January 23, 12

Page 35: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

16

Trovare il # di voli del giovedì di ogni aeroporto da cui partano almeno 100 voli a settimana

SELECT CittàPart, count(*)FROM VOLOWHERE GiornoSett = ‘Giovedì’GROUP BY CittàPartHAVING count(*) > 100

Il secondo conteggio deve avvenire su tutti i voli dell’aeroporto, non solo su quelli del giovedì

Monday, January 23, 12

Page 36: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

16

Trovare il # di voli del giovedì di ogni aeroporto da cui partano almeno 100 voli a settimana

SELECT CittàPart, count(*)FROM VOLOWHERE GiornoSett = ‘Giovedì’GROUP BY CittàPartHAVING count(*) > 100

Il secondo conteggio deve avvenire su tutti i voli dell’aeroporto, non solo su quelli del giovedì SELECT CittàPart, count(*)

FROM VOLOWHERE GiornoSett = ‘Giovedì’ AND CittàPart IN ( SELECT CittàPart FROM VOLO GROUP BY CittàPart HAVING count(*) > 100 )GROUP BY CittàPart

Monday, January 23, 12

Page 37: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

17

8)REGISTA ( Nome, DataNascita, Nazionalità )

ATTORE ( Nome, DataNascita, Nazionalità )

INTERPRETA ( Attore, Film, Personaggio )

FILM ( Titolo, NomeRegista, Anno)

PROIEZIONE ( NomeCin, CittàCin, TitoloFilm )

CINEMA ( Città, NomeCinema, #Sale, #Posti )

Monday, January 23, 12

Page 38: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

18

Le nazionalità dei registi che hanno diretto qualche film nel 1992 ma non hanno diretto film nel 1993

Monday, January 23, 12

Page 39: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

18

Le nazionalità dei registi che hanno diretto qualche film nel 1992 ma non hanno diretto film nel 1993

SELECT distinct NazionalitàFROM REGISTA WHERE Nome IN ( SELECT NomeRegista FROM FILM WHERE Anno=‘1992’) AND Nome NOT IN ( SELECT NomeRegista FROM FILM WHERE Anno=‘1993’)

Monday, January 23, 12

Page 40: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

20

Le date di nascita dei registi che hanno diretto film in proiezione sia a Torino sia a Milano

Monday, January 23, 12

Page 41: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

20

Le date di nascita dei registi che hanno diretto film in proiezione sia a Torino sia a Milano

select distinct DataNascitafrom REGISTA join FILM on Nome=NomeRegistawhere Titolo in ( SELECT TitoloFilm FROM PROIEZIONE WHERE CittàCin=‘Milano’) AND Titolo in ( SELECT TitoloFilm FROM PROIEZIONE WHERE CittàCin=‘Torino’)

Monday, January 23, 12

Page 42: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

21

Nomi dei registi che hanno diretto nel 1993 più film di quanti ne avevano diretti nel 1992

Monday, January 23, 12

Page 43: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

21

Nomi dei registi che hanno diretto nel 1993 più film di quanti ne avevano diretti nel 1992

SELECT NomeRegistaFROM FILM AS F WHERE Anno=‘1993’GROUP BY NomeRegistaHAVING count(*) > ( SELECT count(*) FROM FILM AS F1 WHERE F1.NomeRegista=F.NomeRegista AND Anno=‘1992’)

Monday, January 23, 12

Page 44: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Trovare gli attori che hanno interpretato più personaggi in uno stesso film (+ di 1 !!)

select distinct Attore from INTERPRETA group by Attore, Film having count(*) > 1

Monday, January 23, 12

Page 45: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Trovare gli attori che hanno interpretato più personaggi in uno stesso film (+ di 1 !!)

select distinct P1.Attorefrom INTERPRETA P1 , INTERPRETA P2where P1.Attore = P2.Attore and P1.Film = P2.Film and P1.Personaggio <> P2.Personaggio

select distinct Attore from INTERPRETA group by Attore, Film having count(*) > 1

Monday, January 23, 12

Page 46: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

26

Trovare gli attori che hanno interpretato più personaggi in uno stesso film (+ di 1 !!)

select distinct P1.Attorefrom INTERPRETA P1 , INTERPRETA P2where P1.Attore = P2.Attore and P1.Film = P2.Film and P1.Personaggio <> P2.Personaggio

select distinct Attore from INTERPRETA group by Attore, Film having count(*) > 1

Monday, January 23, 12

Page 47: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

27

Trovare i film in cui recita un solo attore che però interpreta più personaggi

Monday, January 23, 12

Page 48: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

27

Trovare i film in cui recita un solo attore che però interpreta più personaggi

SELECT Film FROM INTERPRETA GROUP BY Film HAVING count(*) > 1 AND count(distinct Attore) = 1

Monday, January 23, 12

Page 49: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

I film di registi italiani in cui non recita nessun italiano

Monday, January 23, 12

Page 50: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

30

I film di registi italiani in cui non recita nessun italiano

select Titolo from FILM join REGISTA on Nome=NomeRegistawhere Nazionalità = Italiana and Titolo NOT IN ( select NomeFilm from INTERPRETA join ATTORE on Nome=NomeAttore where Nazionalità = Italiana )

Monday, January 23, 12

Page 51: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

31

Registi che hanno recitato in (almeno) un loro film

Monday, January 23, 12

Page 52: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

31

Registi che hanno recitato in (almeno) un loro film

SELECT DISTINCT NomeRegistaFROM FILM join INTERPRETA on Titolo=FilmWHERE NomeRegista=Attore

Monday, January 23, 12

Page 53: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

32

I registi che hanno recitato in almeno 4 loro film interpretandovi un totale di almeno 5 personaggi diversi

NB: non trattiamo il caso in cui un regista/attore interpreta personaggi diversi che però hanno lo stesso nome, in film diversi

Monday, January 23, 12

Page 54: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

32

I registi che hanno recitato in almeno 4 loro film interpretandovi un totale di almeno 5 personaggi diversi

select NomeRegistafrom FILM join INTERPRETA on Titolo=Filmwhere NomeRegista=Attoregroup by NomeRegistahaving count( distinct Titolo ) >= 4 and count( distinct Personaggio ) >= 5

NB: non trattiamo il caso in cui un regista/attore interpreta personaggi diversi che però hanno lo stesso nome, in film diversi

Monday, January 23, 12

Page 55: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Basta così...

26Monday, January 23, 12

Page 56: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

9/3/2007• Un database gestisce le bollette telefoniche di una

compagnia di telefonia mobile.CLIENTE (codicefiscale, nome, cognome, numTelefonico, PianoTariffario)PIANOTARIFFARIO (codice, costoScattoAllaRisposta, costoAlSecondo)TELEFONATA (codicefiscale, data, ora, numeroDestinatario, durata)BOLLETTA (codicefiscale, mese, anno, cifra)

33

Monday, January 23, 12

Page 57: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Selezionare i clienti per i quali l’ammontare complessivo delle bollette del 2006 supera di oltre il 20% l’ammontare delle proprie bollette nell’anno 2005.

SELECT codfiscale, SUM(cifra)FROM BOLLETTA B1WHERE anno = 2006GROUP BY codfiscaleHAVING SUM(cifra) > 1,20 * ( SELECT SUM(cifra) FROM BOLLETTA B2 WHERE B1.codfiscale = B2.codfiscale AND B2.anno = 2005 )

34Monday, January 23, 12

Page 58: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Selezionare i clienti per i quali il costo vivo delle telefonate (inteso senza scatto alla risposta) sia mediamente inferiore allo scatto alla risposta del piano tariffario da essi sottoscritto. Si utilizzi una

CREATE VIEW CostoVivo (codicefiscale, data, ora, costo) ASSELECT T.codicefiscale, T.data, T.ora, T.durata * P.costoAlSecondoFROM (TELEFONATA T JOIN CLIENTE C ON T.codicefiscale = C.codicefiscale) JOIN PIANOTARIFFARIO P ON C.pianoTariffario = P.codice) SELECT codicefiscaleFROM CostoVivo CVGROUP BY codicefiscaleHAVING avg(costo) > ALL (SELECT costoScattoAllaRisposta FROM PIANOTARIFFARIO P JOIN CLIENTE C ON P.codice = C.pianoTariffario WHERE C.codicefiscale = CV.codicefiscale)

35Monday, January 23, 12

Page 59: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

5/7/2007• Il seguente schema rappresenta i dati relativi alle prenotazioni

alberghiere effettuate presso una agenzia viaggi.

HOTEL(Codice, NomeH, Citta, Classe) CLIENTE(CodiceFiscale, NomeC,CognomeC, Indirizzo, Telefono)PRENOTAZIONE(CodiceCliente, CodiceHotel, DataPartenza, CostoGiornaliero, Durata)

36Monday, January 23, 12

Page 60: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Estrarre il nome, la città e la classe degli hotel in cui nel 2006 qualche cliente ha soggiornato per almeno 2 volte

CREATE VIEW SOGGIORNI06(CodiceHotel,CodiceCliente,NroSoggiorni) AS SELECT CodiceHotel, CodiceCliente, Count(*)FROM PRENOTAZIONEWHERE DataPartenza >= ’01.01.2006’ AND DataPartenza <= ‘31.12.2006’GROUPBY CodiceHotel, CodiceCliente SELECT NomeH, Citta, ClasseFROM HOTELWHERE Codice IN ( SELECT CodiceHotel FROM SOGGIORNI06 WHERE NroSoggiorni >=2 )

37Monday, January 23, 12

Page 61: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Determinare il soggiorno più costoso per quei clienti che non hanno mai prenotato soggiorni di durata superiore ai 7 giorni. Si estraggano il codice fiscale del cliente, la data di partenza, il costo del soggiorno e il nome dell’hotel

CREATE VIEW COSTOSOGGIORNO (CodiceFiscale, Costo) AS SELECT CodiceCliente, CostoGiornaliero* DurataFROM PRENOTAZIONE SELECT P.CodiceCliente, P.DataPartenza, C1.Costo, H.NomeHotelFROM PRENOTAZIONE P, COSTOSOGGIORNO C1, HOTEL HWHERE P.CodiceCliente=C1.CodiceFiscale AND P.CodiceHotel=H.Codice AND C1.Costo = (SELECT MAX(Costo) FROM COSTOSOGGIORNO as C2 WHERE C1. CodiceFiscale=C2. CodiceFiscale) AND P.CodiceCliente NOT IN (SELECT CodiceCliente FROM PRENOTAZIONE WHERE Durata>7)

38Monday, January 23, 12

Page 62: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

5/9/2007• Il seguente schema rappresenta i dati relativi ai

campionati mondiali di calcio. SQUADRA(Nazione, Anno, Allenatore, PosizioneInClassifica)ORGANIZZAZIONE ( Anno, Nazione )GIOCATORE ( ID, Nome )PARTECIPAZIONE ( IDGiocatore, Anno, Nazione, Ruolo, GoalSegnati )

39

Monday, January 23, 12

Page 63: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Estrarre il nome delle Nazioni che non hanno mai vinto il mondiale organizzato da loro

select Nazionefrom Organizza Owhere Nazione not in ( select Nazione from Squadra where Anno = O.Anno and PosizioneInClassifica = 1 )

40Monday, January 23, 12

Page 64: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Determinare per ogni campionato mondiale la Nazionale che ha convocato il numero più elevato di giocatori

select Anno, Nazione, count(*) as NumeroConvocazionifrom Partecipazione Pgroup by Anno, Nazionehaving count(*) >= all ( select count(*) from Partecipazione where Anno = P.Anno group by Nazione )

41Monday, January 23, 12

Page 65: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

In alternativa, con una vista intermedia:

create view NumeroConv(Edizione,Squadra,Convocati) asselect Anno, Nazione, count(*)from Partecipazione Pgroup by Anno, Nazione select Edizione, Squadra, Convocatifrom NumeroConv Nwhere Convocati = ( select max(Convocati) from NumeroConv where Edizione = N.Edizione )

42Monday, January 23, 12

Page 66: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Estrarre i nomi dei giocatori che hanno partecipato a 3 edizioni diverse del mondiale oppure che hanno partecipato con più di una Nazionale.

select Nomefrom Giocatore Gwhere 3 = ( select count(*) from Partecipazione where IDGiocatore = G.ID ) or 1 < ( select count(distinct Nazione) from Partecipazione where IDGiocatore = G.ID )

43Monday, January 23, 12

Page 67: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

44

15)Cliente(CodCliente, Nome, Indirizzo, Città)

Ordine(Numero, CodCliente, Data, Importo)

PartiOrdine(NroOrdine, CodProdotto, Quantità, PrezzoUnitario)

Prodotto(Codice, Descrizione, QtaMagazzino)

Monday, January 23, 12

Page 68: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

45

Nomi dei clienti che non hanno mai ordinato prodotti che siano

stati ordinati anche dalla ditta “Brambilla’’

Monday, January 23, 12

Page 69: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

45

SELECT NomeFROM ClienteWHERE Nome not in ( SELECT nome

FROM cliente c, ordine o, partiordine WHERE c.codcliente=o.codcliente AND numero=nroordine AND codprodotto in ( SELECT codprodotto

FROM cliente c, ordine o, partiordine po1 WHERE nome="Brambilla" AND c.codcliente=o.codcliente AND numero=nroordine))

Nomi dei clienti che non hanno mai ordinato prodotti che siano

stati ordinati anche dalla ditta “Brambilla’’

Monday, January 23, 12

Page 70: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

46

Visualizzare i nomi dei clienti con l’ammontare totale degli ordini effettuati

Monday, January 23, 12

Page 71: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

46

Visualizzare i nomi dei clienti con l’ammontare totale degli ordini effettuati

SELECT Nome, sum(Importo) AS ImportoTotFROM Cliente AS C, Ordine AS OWHERE O.CodCliente=C.CodClienteGROUP BY CLIENTE.NomeORDER BY 2

Monday, January 23, 12

Page 72: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

47

Trovare le descrizioni dei prodotti di cui si è venduta nel 1995 una quantità maggiore almeno del 35% rispetto alla quantità venduta nel 1994

Monday, January 23, 12

Page 73: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

47

CREATE VIEW vista1 (CodProdotto, Somma, Data) ASSELECT P.CodProdotto, Sum(P.Quantità) AS Somma, O.DataFROM Ordine O, PartiOrdine PWHERE P.NroOrdine=NumeroGROUP BY P.CodProdotto, O.Data

Trovare le descrizioni dei prodotti di cui si è venduta nel 1995 una quantità maggiore almeno del 35% rispetto alla quantità venduta nel 1994

Monday, January 23, 12

Page 74: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

48

SELECT descrizioneFROM vista1, prodottoWHERE prodotto.codice= vista1.CodProdotto AND vista1.data=1995 AND vista1.codprodotto IN (SELECT a.codprodotto

FROM vista1 as a, vista1 as bWHERE vista1.data=1995 AND a.data=1994 AND a.codprodotto=b.codprodotto AND b.somma>1.35*a.somma);

Monday, January 23, 12

Page 75: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

49

16) Dato il seguente schema relazionale:

AGENTE( Nome, Percentuale)

ARTICOLO( Nome, Descrizione, Tipo)

CLIENTE( Nome, Indirizzo, Telefonoi)

VENDITA( Nome-Comp, Nome-Art, Nome-Ag, Data, Quantità, Importo, Validità)

Monday, January 23, 12

Page 76: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Nomi degli agenti che hanno venduto più di 5 articoli di tipo “automobile” nel 1993

Monday, January 23, 12

Page 77: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

50

CREATE VIEW V1(Nome, Quantità) ASSELECT Ag.Nome, V.QuantitàFROM Agente Ag, Articolo Ar, Vendita VWHERE Ar.Nome=V.NomeArt AND Ag.Nome=V.NomeAg AND V.Data between 1/1/93 and 31/12/93 AND Ar.Tipo="automobile"

SELECT NomeFROM V1GROUP BY NomeHAVING sum(Quantità) > 5

Nomi degli agenti che hanno venduto più di 5 articoli di tipo “automobile” nel 1993

Monday, January 23, 12

Page 78: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

51

Selezionare gli Agenti che hanno venduto qualche articolo di tipo “scarpa” ma non hanno venduto nulla a clienti il cui indirizzo è “via Po’, Milano”

Monday, January 23, 12

Page 79: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

51

SELECT V.NomeAgFROM ARTICOLO A, VENDITA V, CLIENTE CWHERE A.Nome=V.NomeArt and C.Nome=V.NomeComp and A.Tipo="scarpa" and Vendite.NomeAg NOT IN (SELECT Vendite.NomeAg FROM Cliente,Vendita WHERE Cliente.Nome=Vendite.NomeComp AND Cliente.Indirizzo = “via Po’, Milano” )

Selezionare gli Agenti che hanno venduto qualche articolo di tipo “scarpa” ma non hanno venduto nulla a clienti il cui indirizzo è “via Po’, Milano”

Monday, January 23, 12

Page 80: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Calcolare il totale dei guadagni degli agenti che vendono articoli di tipo ‘immobile’

Monday, January 23, 12

Page 81: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

52

CREATE VIEW ImpImm (NomAg, Tot) asSELECT NomeAg, sum(Importo) as ImpTotFROM Vendita join Articolo on Nome=NomeArtWHERE Tipo=‘immobile’GROUP BY NomeAg

Calcolare il totale dei guadagni degli agenti che vendono articoli di tipo ‘immobile’

SELECT Nome, Tot*Percentuale/100 as totGuad FROM ImpImm JOIN Agente ON NomAg=Nome

Monday, January 23, 12

Page 82: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

53

17) Dato il seguente schema relazionale:

AUTORE(NOME, COGNOME, Data-N, Nazionalita) AUTORELIBRO(NOME, COGNOME, SEGNATURA)LIBRO(SEGNATURA, Scaffale, Argomento, Lingua)

Monday, January 23, 12

Page 83: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

54

Selezionare il COGNOME degli autori tedeschi di libri in italiano con argomento “filosofia” o “logica”

Monday, January 23, 12

Page 84: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

54

SELECT CognomeFROM Autore A, Libro L, Autorelibro AL,WHERE A.Nome=AL.Nome and A.Cognome=AL.Cognome and A.Segnatura=L.Segnatura and Nazionalita=“tedesca” and Lingua=“italiano” and(Argomento=“filosofia” OR Argomento=“logica”)

Selezionare il COGNOME degli autori tedeschi di libri in italiano con argomento “filosofia” o “logica”

Monday, January 23, 12

Page 85: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

55

Selezionare la data di nascita degli autori italiani di libri in inglese di Argomento “informatica”, che non sono autori di libri di Argomento “matematica”.

Monday, January 23, 12

Page 86: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

56

SELECT Data_NFROM Autore AS A JOIN Autorelibro ON (A.Nome=Autorelibro.Nome AND A.Cognome=Autorelibro.Cognome) JOIN Libro ON (Autorelibro.Segnatura=Libro.Segnatura) WHERE Nazionalita=“IT” AND Lingua=“ING” AND Argomento=“INF” AND A NOT IN ( SELECT * FROM Autorelibro AS AL JOIN Libro AS L ON (AL.Segnatura=L.Segnatura) WHERE A.Nome=AL.Nome AND A.Cognome=AL.Cognome AND Argomento=“MATEMATICA”)

Monday, January 23, 12

Page 87: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

57

Selezionare quegli autori (selezionati in base al loro Nome e Cognome) che hanno più di 10 libri diversi contenuti nel terzo scaffale della biblioteca

Monday, January 23, 12

Page 88: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

57

Selezionare quegli autori (selezionati in base al loro Nome e Cognome) che hanno più di 10 libri diversi contenuti nel terzo scaffale della biblioteca

SELECT Nome, CognomeFROM Autorelibro JOIN Libro ON Autorelibro.Segnatura=Libro.SegnaturaWHERE Scaffale=“3”GROUP BY Cognome, NomeHAVING COUNT(*) > 10

Monday, January 23, 12

Page 89: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

58

18)CD (CDNumber, Title, Year, Price)

Track (CDNumber,PerformanceCode, trackNo)

Recording (Performance, SongTitle, Year)

Composer (CompName, SongTitle)

Singer (SingerName, PerformanceCode)

Monday, January 23, 12

Page 90: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

59

I cantautori (persone che hanno scrittoe cantato la stessa canzone) il cui nome è ‘David’

Monday, January 23, 12

Page 91: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

59

SELECT SingerNameFROM ( Singer S join Recording R on S.PerformanceCode=R.Performance ) join Composer C on R.SongTitle=C.SongTitleWHERE SingerName=CompName AND SingerName = ‘David’

I cantautori (persone che hanno scrittoe cantato la stessa canzone) il cui nome è ‘David’

Monday, January 23, 12

Page 92: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

60

I titolo dei dischi che contengono canzoni di cui non si conosce l’anno di registrazione

Monday, January 23, 12

Page 93: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

60

I titolo dei dischi che contengono canzoni di cui non si conosce l’anno di registrazione

SELECT TitleFROM CD JOIN Track AS T ON CD.CDNumber=T.CDNumber JOIN Recording AS R ON T.PerformanceCode= R.PerformanceCodeWHERE R.Year IS NULL

Monday, January 23, 12

Page 94: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

61

I pezzi del disco con numero di serie 78574, ordinati per numero progressivo, con indicazione degli interpreti associati

Monday, January 23, 12

Page 95: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

61

I pezzi del disco con numero di serie 78574, ordinati per numero progressivo, con indicazione degli interpreti associati

SELECT TrackNo, SingerNameFROM Track JOIN Singer ON Track.PerformanceCode= Singer.PerformanceCodeWHERE CDNumber=78574ORDER BY TrackNo

Monday, January 23, 12

Page 96: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

62

Gli autori che non hanno mai inciso una canzone scritta da loro

Monday, January 23, 12

Page 97: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

63

SELECT CompNameFROM ComposerWHERE CompName NOT IN(SELECT CompName FROM Composer AS C JOIN Recording AS R ON C.SongTitle=R.SongTiltle JOIN Singer ON Performance=PerformanceCode WHERE CompName=SingerName )

Monday, January 23, 12

Page 98: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

64

Il cantante del CD che contiene il maggior numero di canzoni

Monday, January 23, 12

Page 99: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

64

create view CdwithNumber(CdNum,NumOfSongs)as select CDNumber, count(*)from Trackgroup by CDNumber

Il cantante del CD che contiene il maggior numero di canzoni

Monday, January 23, 12

Page 100: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

65

select SingerNamefrom Singer S join Track T on S.PerformanceCode = T.PerformanceCode join CdwithNumber C on T.CDNumber = C.CDNumwhere NumOfSongs = (select max (NumOfSongs) from CdwithNumber)

Monday, January 23, 12

Page 101: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

1/2/2008• Il seguente schema rappresenta le informazioni riguardo alla

gestione di una videoteca: DVD (CodiceDVD, TitoloFilm, Regista, Durata)

CLIENTE (CodiceFiscale, Nome, Cognome, Indirizzo, Telefono, Categoria) NOLEGGIO (CodiceFiscale, CodiceDVD, DataInizio, DataFine, CostoGiornaliero)

66Monday, January 23, 12

Page 102: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Scrivere in SQL l’interrogazione che estrae i clienti che non hanno mai noleggiato due film dello stesso regista.

SELECT Codicefiscale, Nome, CognomeFROM CLIENTEWHERE CodicdeFiscale NOT IN ( SELECT N1.CodiceFiscale FROM DVD D1, NOLEGGIO N1, DVD D2, NOLEGGIO N2 WHERE N1. CodiceFiscale=N2. CodiceFiscale AND N1.CodiceDVD=D1.CodiceDVD AND N2.CodiceDVD=D2.CodiceDVD AND D1.Regista=R2.Regista AND D1.Titolo<>D2.Titolo )

67Monday, January 23, 12

Page 103: Esercizi SQL - Alfonso Fuggetta · 2012-01-23 · Esercizi SQL Monday, January 23, 12. 2 2) ... Le nazioni da cui parte e in cui arriva il volo AZ274 SELECT A1.Nazione, A2.Nazione

Scrivere in SQL l’interrogazione che estrae il cliente con il maggior numero di noleggi iniziati nel 2007.

SELECT Codicefiscale, Nome, CognomeFROM CLIENTEWHERE CodicdeFiscale IN ( SELECT CodiceFiscale FROM NOLEGGIO WHERE DataInizio>=1/1/2007 AND DataInizio <=31/12/2007 GROUP BY CodiceFiscale HAVING count(*) >=SELECT count(*) FROM NOLEGGIO WHERE DataInizio>=1/1/2007 AND DataInizio <=31/12/2007 GROUP BY CodiceFiscale )

68Monday, January 23, 12