Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf ·...

38
Basi di dati - Modelli e linguaggi di interrogazione- Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone Copyright © 2002 - The McGraw-Hill Companies, srl Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo 4: SQL SQL 24/09/2002

Transcript of Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf ·...

Page 1: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Atzeni, Ceri, Paraboschi, TorloneBasi di dati

McGraw-Hill, 1996-2002

Capitolo 4:

SQLSQL

24/09/2002

Page 2: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Operatori aggregati

• Nelle espressioni della target list possiamo avere anche espressioni che calcolano valoria partire da insiemi di ennuple:• conteggio, minimo, massimo, media, totale• sintassi base (semplificata):

Funzione ( [ DISTINCT ] * )Funzione ( [ DISTINCT ] Attributo )

Page 3: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Operatori aggregati: COUNT

• Il numero di figli di Franco

select count(*) as NumFigliDiFrancofrom Paternitawhere Padre = 'Franco'

• l’operatore aggregato ( count ) viene applicato al risultato dell’interrogazione:

select * from Paternitawhere Padre = 'Franco'

Page 4: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

PadrePaternità Figlio

LuigiLuigi

SergioOlga

FilippoFrancoFranco

AndreaAldo

Franco

FrancoFranco

AndreaAldo

NumFigliDiFranco2

Page 5: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

COUNT e valori nulli

select count(*) from persone

select count(reddito) from persone

select count(distinct reddito) from persone

Nome EtàPersone RedditoAndrea 27

Maria 55Anna 50

Aldo 2521

2135

NULL

Page 6: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Altri operatori aggregati

• SUM, AVG, MAX, MIN

• Media dei redditi dei figli di Franco

select avg(reddito) from persone join paternita on nome=figliowhere padre='Franco'

Page 7: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Operatori aggregati e valori nulli

select avg(reddito) as redditomediofrom persone

Nome EtàPersone RedditoAndrea 27

Maria 55Anna 50

Aldo 2530

3636

NULL

Page 8: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Operatori aggregati e target list

• un’interrogazione scorretta:

select nome, max(reddito)from persone

• di chi sarebbe il nome? La target list deve essere omogenea

select min(eta), avg(reddito)from persone

Page 9: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

• Le funzioni possono essere applicate a partizioni delle relazioni

• Clausola GROUP BY:GROUP BY listaAttributi

Operatori aggregati e raggruppamenti

Page 10: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

• Il numero di figli di ciascun padre

select padre, count(*) AS NumFiglifrom paternitagroup by Padre

Operatori aggregati e raggruppamenti

Padrepaternita Figlio

LuigiLuigi

SergioOlga

FilippoFrancoFranco

AndreaAldo

Franco Padre NumFigli

LuigiSergio

2Franco 2

1

Page 11: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Semantica di interrogazioni con operatori aggregati e

raggruppamenti

1. interrogazione senza group by e senza operatori aggregatiselect *from paternita

2. si raggruppa e si applica l’operatore aggregato a ciascun gruppo

Page 12: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Raggruppamenti e target list

scorrettaselect padre, avg(f.reddito), p.redditofrom persone f join paternita on figlio = nome join

persone p on padre =p.nomegroup by padre

correttaselect padre, avg(f.reddito), p.redditofrom persone f join paternita on figlio = nome join

persone p on padre =p.nomegroup by padre, p.reddito

Page 13: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Condizioni sui gruppi

• I padri i cui figli hanno un reddito medio maggiore di 25

select padre, avg(f.reddito)from persone f join paternita on figlio = nomegroup by padrehaving avg(f.reddito) > 25

Page 14: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

WHERE o HAVING?

• I padri i cui figli sotto i 30 anni hanno un reddit o medio maggiore di 20

select padre, avg(f.reddito)from persone f join paternita on figlio = nomewhere eta < 30 group by padrehaving avg(f.reddito) > 25

Page 15: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Sintassi, riassumiamo

SelectSQL ::= select ListaAttributiOEspressionifrom ListaTabelle[ where CondizioniSemplici ][ group by

ListaAttributiDiRaggruppamento ][ having CondizioniAggregate ][ order by ListaAttributiDiOrdinamento ]

Page 16: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Unione, intersezione e differenza

• La select da sola non permette di fare unioni; serve un costrutto esplicito:

select …union [all]select ...

• i duplicati vengono eliminati (a meno che si usi all ); anche dalle proiezioni!

Page 17: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Notazione posizionale!

select padre from paternitaunionselect madrefrom maternita

• quali nomi per gli attributi del risultato?• nessuno • quelli del primo operando• …

Page 18: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Luisa

AnnaAnnaMariaMaria

LuisaMaria

OlgaFilippoAndrea

Aldo

Luigi

Figlio

LuigiLuigi

FrancoFranco

SergioOlga

FilippoAndrea

Aldo

Franco

Luisa

AnnaAnnaMariaMaria

LuisaMaria

OlgaFilippoAndrea

Aldo

Luigi

Padre Figlio

LuigiLuigi

FrancoFranco

SergioOlga

FilippoAndrea

Aldo

Franco

Page 19: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Notazione posizionale, 2

select padre, figliofrom paternitaunionselect figlio, madrefrom maternita

select padre, figliofrom paternitaunionselect madre, figliofrom maternita

Page 20: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Notazione posizionale, 3

• Anche con le ridenominazioni non cambia niente:select padre as genitore, figliofrom paternitaunionselect figlio, madre as genitorefrom maternita

• Corretta:select padre as genitore, figliofrom paternitaunionselect madre as genitore, figlio from maternita

Page 21: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Differenza

select Nomefrom Impiegatoexceptselect Cognome as Nomefrom Impiegato

• vedremo che si può esprimere con select nidificate

Page 22: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Intersezioneselect Nomefrom Impiegatointersectselect Cognome as Nomefrom Impiegato

• equivale a

select I.Nomefrom Impiegato I, Impiegato Jwhere I.Nome = J.Cognome

Page 23: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Interrogazioni nidificate

• le condizioni atomiche permettono anche • il confronto fra un attributo (o più,

vedremo poi) e il risultato di una sottointerrogazione

• quantificazioni esistenziali

Page 24: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

• nome e reddito del padre di Franco

select Nome, Redditofrom Persone, Paternitawhere Nome = Padre and Figlio = 'Franco'

select Nome, Redditofrom Personewhere Nome = ( select Padre

from Paternitawhere Figlio = 'Franco')

Page 25: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Interrogazioni nidificate, commenti

• La forma nidificata è “meno dichiarativa”, ma talvolta più leggibile (richiede meno variabili)

• La forma piana e quella nidificata possono essere combinate

• Le sottointerrogazioni non possono contenere operatori insiemistici (“l’unione si fa solo al livello esterno”); la limitazione non è significativa

Page 26: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

• Nome e reddito dei padri di persone che guadagnano più di 20 milioni

select distinct P.Nome, P.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome

and F.Reddito > 20

select Nome, Redditofrom Personewhere Nome in (select Padre

from Paternitawhere Figlio = any (select Nome

from Personewhere Reddito > 20))

Page 27: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

• Nome e reddito dei padri di persone che guadagnano più di 20 milioni

select distinct P.Nome, P.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome

and F.Reddito > 20

select Nome, Redditofrom Personewhere Nome in (select Padre

from Paternita, Persone where Figlio = Nomeand Reddito > 20)

Page 28: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Interrogazioni nidificate, commenti, 2

• La prima versione di SQL prevedeva solo la forma nidificata (o strutturata), con una sola relazione in ogni clausola FROM. Insoddisfacente:• la dichiaratività è limitata• non si possono includere nella target

list attributi di relazioni nei blocchi interni

Page 29: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

• Nome e reddito dei padri di persone che guadagnano più di 20 milioni, con indicazione del reddito del figlio

select distinct P.Nome, P.Reddito, F.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome

and F.Reddito > 20

select Nome, Reddito, ????from Personewhere Nome in (select Padre

from Paternitawhere Figlio = any (select Nome

from Personewhere Reddito > 20))

Page 30: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Interrogazioni nidificate, commenti, 3

• regole di visibilità:• non è possibile fare riferimenti a variabili

definite in blocchi più interni• se un nome di variabile è omesso, si

assume riferimento alla variabile più“vicina”

• in un blocco si può fare riferimento a variabili definite in blocchi più esterni; la semantica base (prodotto cartesiano, selezione, proiezione) non funziona più, vedremo presto

Page 31: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Quantificazione esistenziale

• Ulteriore tipo di condizione• EXISTS ( Sottoespressione )

Page 32: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

• Le persone che hanno almeno un figlio

select *from Personewhere exists ( select *

from Paternitawhere Padre = Nome) or

exists ( select *from Maternitawhere Madre = Nome)

Page 33: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

• I padri i cui figli guadagnano tutti piùdi venti milioni

select distinct Padrefrom Paternita Zwhere not exists (

select *from Paternita W, Personewhere W.Padre = Z.Padre

and W.Figlio = Nome and Reddito <= 20)

Page 34: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Semantica delle espressioni “correlate”

• L’interrogazione interna viene eseguita una volta per ciascuna ennupla dell’interrogazione esterna

Page 35: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Visibilità

• scorretta:

select *from Impiegatowhere Dipart in (select Nome

from Dipartimento D1where Nome = 'Produzione') or

Dipart in (select Nomefrom Dipartimento D2where D2.Citta = D1.Citta)

Page 36: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Disgiunzione e unione (ma non sempre)select * from Persone where Reddito > 30

union select F.*from Persone F, Paternita, Persone Pwhere F.Nome = Figlio and Padre = P.Nome

and P.Reddito > 30

select *from Persone Fwhere Reddito > 30 or

exists (select *from Paternita, Persone Pwhere F.Nome = Figlio and Padre = P.Nome

and P.Reddito > 30)

Page 37: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Differenza e nidificazione

select Nome from Impiegatoexceptselect Cognome as Nome from Impiegato

select Nomefrom Impiegato Iwhere not exists (select *

from Impiegatowhere Cognome = I.Nome)

Page 38: Atzeni, Ceri, Paraboschi, Torlone Basi di datisi.deis.unical.it/~cuzzocrea/basi/SQL2.pdf · Capitolo 4 Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo

24/09/2002

Basi di dati - Modelli e linguaggi di interrogazione - Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone

Copyright © 2002 - The McGraw-Hill Companies, srl

Capitolo 4

Massimo e nidificazione

• La persona (o le persone) con il reddito massimo

select *from personewhere reddito = ( select max(reddito)

from persone)