Download - Basi di Dati

Transcript
Page 1: Basi di Dati

G. Mecca – [email protected] – Università della BasilicataG. Mecca – [email protected] – Università della Basilicata

Basi di Dati

SQL-92Concetti Avanzati

versione 2.0

Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Page 2: Basi di Dati

2G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Concetti Avanzati

RaggruppamentiClausole GROUP BY e HAVINGForma Generale della SELECT

NidificazioneUso nel DML e DDLNidificazione, Viste e Potere Espressivo

Esecuzione di una Query SQL

SQL-92 >> Sommario

Page 3: Basi di Dati

3G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni con Raggruppamenti

Nucleo della SELECTSELECT, FROM, [WHERE]

Clausola aggiuntiva[ORDER BY]

Ulteriori clausole aggiuntive[GROUP BY][HAVING]

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

Page 4: Basi di Dati

4G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

GROUP BYoperatore di “raggruppamento”

SintassiGROUP BY <attributi di raggruppamento>

Semanticaraggruppamento della tabelladivisione in gruppi delle ennupleraggruppamento sulla base dei valori comuni per gli

attributi di raggruppamento

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

Page 5: Basi di Dati

5G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

matr cognome nome ciclo anno relatore

111 Rossi Mario laurea tr. 1 null

222 Neri Paolo laurea tr. 2 null

333 Rossi Maria laurea tr. 1 null

444 Pinco Palla laurea tr. 3 FT

77777 Bruno Pasquale laurea sp. 1 FT

88888 Pinco Pietro laurea sp. 1 CV

Studenti

Esempio: raggruppamento della tabella studenti per ciclo (GROUP BY ciclo)

gruppo Aciclo=‘laurea tr.’

gruppo Bciclo=‘laurea sp.’

Page 6: Basi di Dati

6G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

matr cognome nome ciclo anno relatore

111 Rossi Mario laurea tr. 1 null

333 Rossi Maria laurea tr. 1 null

222 Neri Paolo laurea tr. 2 null

444 Pinco Palla laurea tr. 3 FT

77777 Bruno Pasquale laurea sp. 1 FT

88888 Pinco Pietro laurea sp. 1 CV

Studenti

Esempio: raggruppamento della tabella studenti per ciclo e anno (GROUP BY ciclo, anno)

gruppo Alaurea tr., 1

gruppo Blaurea tr., 2

gruppo Claurea tr., 3

gruppo Dlaurea sp., 1

Page 7: Basi di Dati

7G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

matr cognome nome ciclo anno relatore

111 Rossi Mario laurea tr. 1 null

333 Rossi Maria laurea tr. 1 null

222 Neri Paolo laurea tr. 2 null

444 Pinco Palla laurea tr. 3 FT

77777 Bruno Pasquale laurea sp. 1 FT

88888 Pinco Pietro laurea sp. 1 CV

Studenti

Esempio: raggruppamento della tabella studenti per matricola (GROUP BY matr)

una ennuplaper ogni gruppo

Page 8: Basi di Dati

8G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

Caratteristiche dei gruppicollezioni di ennuplevalori comuni per gli attributi di raggruppam.

Operazioni interessanti sui gruppifunzioni aggregativeanalisi della distribuzione di valori tra i gruppi

es: numero di studenti per ciclo o per annoOLAP (“On Line Analytical Processing”)

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

Page 9: Basi di Dati

9G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

Interrogazioni con raggruppamentoattributi di raggruppamento (nella GROUP

BY)proiezioni su attributi di raggruppamento e

funzioni aggregative applicate al gruppo (nella SELECT)

condizioni sui gruppi (che coinvolgono funzioni aggregative) (nella HAVING)

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

Page 10: Basi di Dati

10G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

Esempio: numero di studenti per ciclo

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

SELECT ciclo, count(*)FROM StudentiGROUP BY ciclo;

Semantica:- viene valutata la clausola FROM- viene effettuato il raggruppam. secondo la GROUP BY- viene valutata la clausola SELECT per ciascun gruppo (ogni gruppo contribuisce ad UNA sola ennupla del ris.)

ciclo count(*)

laurea tr. 4

laurea sp. 2

Page 11: Basi di Dati

11G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

Esempio: numero di studenti per ciclo (continua)

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

SELECT count(*)FROM StudentiGROUP BY ciclo;

count(*)

4

2

Page 12: Basi di Dati

12G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

Vincoli sintattici sulla SELECTse c’è una GROUP BY, solo gli attributi di

raggruppamento possono comparire nella SELECT

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

SELECT ciclo, count(*)

FROM Studenti

GROUP BY ciclo;

SELECT count(*)

FROM Studenti

GROUP BY ciclo;

SELECT anno, count(*)

FROM Studenti

GROUP BY ciclo;

Page 13: Basi di Dati

13G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

Esempio: distribuzione per anno degli studenti della laurea triennale

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

SELECT anno, count(*) as numstudFROM Studenti

GROUP BY anno;WHERE ciclo=‘laurea tr.’

Page 14: Basi di Dati

14G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

matr cognome nome ciclo anno relatore

111 Rossi Mario laurea tr. 1 null

333 Rossi Maria laurea tr. 1 null

222 Neri Paolo laurea tr. 2 null

444 Pinco Palla laurea tr. 3 FT

II passo: GROUP BY anno

anno numstud

1 2

2 1

3 1

risultato finale:SELECT anno,count(*) as numstud

matr cognome nome ciclo anno relatore

111 Rossi Mario laurea tr. 1 null

333 Rossi Maria laurea tr. 1 null

222 Neri Paolo laurea tr. 2 null

444 Pinco Palla laurea tr. 3 FT

I passo: WHERE ciclo=‘laurea tr.’

Page 15: Basi di Dati

15G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

Esempio: distribuzioni delle medie,solo per i corsi con più di 2 esaminon è possibile usare la WHEREHAVING: condizioni aggregate su gruppi

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

SELECT corso, avg(voto) as votomedioFROM Esami

HAVING count(voto)>2;GROUP BY corso

Page 16: Basi di Dati

16G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausole GROUP BY e HAVING

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

corso votomedio

PR1 26

ASD 26

risultato finale

studente corso voto lode

111 PR1 27 false

88888 PR1 30 false

77777 PR1 21 false

111 INFT 24 false

88888 INFT 30 true

222 ASD 30 true

77777 ASD 20 false

88888 ASD 28 false

Esami I passo:raggruppamentosecondo la GROUP BY

II passo:selezione dei gruppi secondola HAVING

III passo:proiezione e rid.secondo la SELECT

Page 17: Basi di Dati

17G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Forma Generale della SELECT

Forma generale della SELECTSELECT [DISTINCT] <risultato>FROM <join o prodotti cartesiani>[WHERE <condizioni>][GROUP BY <attributi di raggruppamento>][HAVING <condizioni sui gruppi>][ORDER BY <attributi di ordinamento>]

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

Page 18: Basi di Dati

18G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Forma Generale della SELECT

Se la GROUP BY mancatutte le ennuple ottenute dopo la WHERE

vengono considerate un unico gruppoin questo caso le funzioni aggregative

producono un unico valore e non sono ammessi attributi ordinari nella SELECT

Nota sulla semanticatutti i valori NULL normalmente vengono

raggruppati assieme

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

Page 19: Basi di Dati

19G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Forma Generale della SELECT

Una semantica operazionaleviene valutata la clausola FROM

join o prodotti cartesiani >> unica tabellaviene valutata la clausola WHERE

selezione delle ennuple della tabella viene valutata l’eventuale GROUP BY

raggruppamento delle ennuple della tabellaviene valutata l’eventuale HAVING

selezione dei gruppi della tabella >>

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

Page 20: Basi di Dati

20G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Forma Generale della SELECT

Una semantica operazionale (continua)viene valutata la clausola SELECT

proiezioni, espressioni e funzioni aggregativeridenominazionieventuale eliminazione di duplicati

viene valutata la clausola ORDER BYordinamenti finali

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

Page 21: Basi di Dati

21G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Forma Generale della SELECT

Esempio: medie in ordine decrescente degli studenti della laurea specialistica che hanno sostenuto almeno due esami

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

SELECT matr, cognome, nome, avg(voto)FROM Studenti JOIN Esami ON matr=studente

HAVING count(*)>=2GROUP BY matr, cognome, nome WHERE ciclo=‘laurea sp.’

ORDER BY avg(voto) DESC;

Page 22: Basi di Dati

22G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Forma Generale della SELECT

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

matr cognome nome ciclo relat

111 Rossi Mario laurea tr. null

333 Rossi Maria laurea tr. null

222 Neri Paolo laurea tr. null

444 Pinco Palla laurea tr. FT

77777 Bruno Pasquale laurea sp. FT

88888 Pinco Pietro laurea sp. CV

Studenti

studente corso voto lode

111 PR1 27 false

222 ASD 30 true

111 INFT 24 false

77777 PR1 21 false

77777 ASD 20 false

88888 ASD 28 false

88888 PR1 30 false

88888 INFT 30 true

Esami

Page 23: Basi di Dati

23G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Forma Generale della SELECT

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

matr cognome nome ciclo relat studente corso voto lode

111 Rossi Mario laurea tr. null 111 PR1 27 false

111 Rossi Mario laurea tr. null 111 INFT 24 false

222 Neri Paolo laurea tr. null 222 ASD 30 true

77777 Bruno Pasquale laurea sp. FT 77777 PR1 21 false

77777 Bruno Pasquale laurea sp. FT 77777 ASD 20 false

88888 Pinco Pietro laurea sp. VC 88888 ASD 28 false

88888 Pinco Pietro laurea sp. VC 88888 PR1 30 false

88888 Pinco Pietro laurea sp. VC 88888 INFT 30 true

Passo 1: FROM Studenti JOIN Esami ON matr=studente

Page 24: Basi di Dati

24G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Forma Generale della SELECT

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

matr cognome nome ciclo relat studente corso voto lode

77777 Bruno Pasquale laurea sp. FT 77777 PR1 21 false

77777 Bruno Pasquale laurea sp. FT 77777 ASD 20 false

88888 Pinco Pietro laurea sp. VC 88888 ASD 28 false

88888 Pinco Pietro laurea sp. VC 88888 PR1 30 false

88888 Pinco Pietro laurea sp. VC 88888 INFT 30 true

Passo II: WHERE ciclo=‘laurea sp.’

Passo III: GROUP BY matr, cognome, nome

matr cognome nome ciclo relat studente corso voto lode

77777 Bruno Pasquale laurea sp. FT 77777 PR1 21 false

77777 Bruno Pasquale laurea sp. FT 77777 ASD 20 false

88888 Pinco Pietro laurea sp. VC 88888 ASD 28 false

88888 Pinco Pietro laurea sp. VC 88888 PR1 30 false

88888 Pinco Pietro laurea sp. VC 88888 INFT 30 true

Page 25: Basi di Dati

25G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Forma Generale della SELECT

SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

matr cognome nome ciclo relat studente corso voto lode

77777 Bruno Pasquale laurea sp. FT 77777 PR1 21 false

77777 Bruno Pasquale laurea sp. FT 77777 ASD 20 false

88888 Pinco Pietro laurea sp. VC 88888 ASD 28 false

88888 Pinco Pietro laurea sp. VC 88888 PR1 30 false

88888 Pinco Pietro laurea sp. VC 88888 INFT 30 true

Passo IV: HAVING count(*) >= 2

Passo V: SELECT matr, cognome, nome, avg(voto)

matr cognome nome avg(voto)

77777 Bruno Pasquale 20,5

88888 Pinco Pietro 29,66

Passo VI: ORDER BY avg(voto) DESCmatr cognome nome avg(voto)

88888 Pinco Pietro 29,66

77777 Bruno Pasquale 20,5

Page 26: Basi di Dati

26G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

SELECT Nidificatela clausola WHERE di una SELECT contiene

un’altra SELECT Due possibili utilizzi

condizioni basate su valori semplici (SELECT che restituiscono un singolo valore)

condizioni basate su collezioni (SELECT ordinarie che restituiscono insiemi di ennup.)

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

Page 27: Basi di Dati

27G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

Condizioni su valori sempliciconfrontano il valore di un attributo con il

risultato di una SELECT “scalare”operatori: >, <, =, >=, <=, <>, LIKE, IS NULL

SELECT “scalare”SELECT che restituisce un’unica ennupla

con un un unico attributotipicamente: funzione aggregativa

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

Page 28: Basi di Dati

28G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

Esempio: lo studente con la matricola più alta

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

SELECT matr, cognome, nomeFROM StudentiWHERE matr = (SELECT max(matr)

FROM Studenti);max(matr)

88888

per ogni ennupla di Studenti, il valore della matricolaviene confrontato con il numero 88888

Page 29: Basi di Dati

29G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

Condizioni su valori non scalari (collezioni)confrontano il valore di un attributo con il risultato di

una SELECT generica (collezione di ennuple)operatori: ordinari combinati con ANY, ALL

ANY“un elemento qualsiasi della collezione”;

es: = ANY, oppure IN ALL

“tutti gli elementi della collezione”; es: > ALL

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

Page 30: Basi di Dati

30G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

Esempio: lo studente con la matricola più alta (senza funzioni aggregative)

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

SELECT matr, cognome, nomeFROM StudentiWHERE matr >= ALL (SELECT matr

FROM Studenti);

matr

111

222

333

444

77777

88888

per ogni ennupla di Studenti, il valore della matricolaviene confrontato con tutte le matricole

Page 31: Basi di Dati

31G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

Sintatticamenteno ORDER BY nelle SELECT nidificate

Semanticaogni volta che è necessario verificare la

condizione, viene calcolato il risultato della SELECT interna

il processo si può ripetere a più livelliin pratica: memorizzazione in una tabella

temporanea

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

Page 32: Basi di Dati

32G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

Nota: Le interrogazioni nidificate possono sostituire i join

Esempio: voti riportati in corsi della laurea triennale

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

SELECT votoFROM EsamiWHERE corso = ANY (SELECT cod

FROM Corsi WHERE ciclo=‘laurea tr.’);

cod

PR1

ASD

stessa semanticadel join

Page 33: Basi di Dati

33G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

Nota: Le interrogazioni nidificate possono sostituire intersezione e differenza

Esempio: cognome e nome dei professori ordinari che non hanno tesisti

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

SELECT cognome, nomeFROM ProfessoriWHERE qualifica=‘ordinario’ AND cod <> ALL (SELECT DISTINCT relatore

FROM Studenti );

relatore

FT

VC

Page 34: Basi di Dati

34G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

Metodologicamentei join si realizzano applicando i joinle op. insiemistiche si realizzano applicando

gli op. insiemistici Quando può servire la nidificazione

nei sistemi in cui non c’è intersezione o diff.es: Access e MySQL

condizioni nella WHERE su aggregaties: lo studente con la media più alta

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

Page 35: Basi di Dati

35G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Interrogazioni Nidificate

Aspetti avanzati (cenni)è possibile fare riferimento ad ennuple della

SELECT esterna nella SELECT internaregole di visibilitàoperatore EXISTS: verifica se una SELECT

nidificata restituisce un risultato vuotosostanzialmente servono per fare joinnon utilizzeremo questa forma

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

Page 36: Basi di Dati

36G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Utilizzo nel DML e nel DDL

Utilizzo nel DMLnella DELETE, nella UPDATE e nella

INSERT, clausola WHERE completa Utilizzo nel DDL

vincoli di ennuplaCHECK (<condizione>)<condizione>: sintassi e semantica identica

alla condizione della clausola WHERE

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

Page 37: Basi di Dati

37G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Utilizzo nel DML e nel DDL

Esempio: è possibile sostenere esami solo per i corsi per cui c’è un docente

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

CREATE TABLE Esami ( studente integer REFERENCES Studenti(matr) ON DELETE cascade ON UPDATE cascade, corso char(3) REFERENCES Corsi(cod), voto integer, lode bool, CHECK (voto>=18 and voto<=30), CHECK (not lode or voto=30), PRIMARY KEY (studente, corso));

CHECK (corso = ANY (SELECT cod FROM Corsi WHERE docente IS NOT NULL))

Vincolo di ennupla aggiuntivo

Page 38: Basi di Dati

38G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Nidificazione, Viste, Potere Espressivo Terzo utilizzo delle viste

esprimere interrogazioni altrimenti inesprimibili

Esempio: Studenti con la media più altaper calcolare la media di ciascuno studente

serve un raggruppamentocondizione nidificata sui gruppinon è possibile nidificare la HAVING

(nidificazione solo nella WHERE)

SQL-92 >> Concetti Avanzati >> Interrogazioni Nidificate

Page 39: Basi di Dati

39G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Nidificazione, Viste, Potere Espressivo Soluzione con le viste

SQL-92 >> Concetti Avanzati >> Viste e Potere Espressivo

CREATE VIEW StudentiConMedia AS SELECT matr, cognome, nome, avg(voto) as mediaFROM Esami JOIN Studenti on studente=matrGROUP BY matr, cognome, nome;

SELECT matr, cognome, nomeFROM StudentiConMediaWHERE media =(SELECT max(media)

FROM StudentiConMedia);

matr cognome nome media

111 Rossi Mario 20,7

222 Neri Paolo 24,5

333 Rossi Maria 25,8

444 Pinco Palla 19,6

77777 Bruno Pasquale 26

88888 Pinco Pietro 26

StudentiConMedia

Page 40: Basi di Dati

40G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Nidificazione, Viste, Potere Espressivo Un ulteriore esempio

numero medio di docenti appartenenti alle facoltà

SQL-92 >> Concetti Avanzati >> Viste e Potere Espressivo

SELECT avg(count(cod))FROM ProfessoriGROUP BY facolta;

CREATE VIEW Facolta AS SELECT facolta, count(*) as numdocenti FROM Professori GROUP BY facolta;

SELECT avg(numdocenti)FROM Facolta;

Page 41: Basi di Dati

41G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Esecuzione di una Query SQL

Processo di valutazione di una queryla query viene inviata al DBMS

interattivamente o da un’applicazioneil DBMS effettua l’analisi sintattica del codice

SQLil DBMS effettua le verifiche sulle

autorizzazioni di accessoil DBMS esegue il processo di ottimizzazione

della query

SQL-92 >> Concetti Avanzati >> Esecuzione di una Query SQL

Page 42: Basi di Dati

42G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Ottimizzazione delle Interrogazioni Processo di ottimizzazione

scelta di una strategia efficiente per la valutazione della query

Piano di esecuzione di una queryscelta dell’ordine di applicazione degli

operatori algebrici necessaristrategia di calcolo del risultato di ciascun

operatore algebrico attraverso le strutture di accesso disponibili

SQL-92 >> Concetti Avanzati >> Esecuzione di una Query SQL

Page 43: Basi di Dati

43G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Un Esempio

Studiamo la seguente interrogazione: “Nomi e cognomi dei tesisti di Christian Vieri iscritti alla laurea specialistica”

SQL-92 >> Concetti Avanzati >> Esecuzione di una Query SQL

SELECT Studente.nome, Studente.cognomeFROM Docente, StudenteWHERE Docente.codice=Studente.relatore AND Studente.ciclo = ‘laurea sp.’ AND Docente.cognome = ‘Vieri’;

Page 44: Basi di Dati

44G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Un Esempio

Forma standard

SQL-92 >> Concetti Avanzati >> Esecuzione di una Query SQL

SELECT S.nome, S.cognomeFROM Docente AS D, Studente AS SWHERE D.codice=S.relatore AND S.ciclo = ‘laurea sp.’ AND D.cognome = ‘Vieri’;

S D

S.nome, S.cognome

D.codice=S.relatore AND S.ciclo=‘laurea sp.’ AND D.cognome=‘Vieri’

X

S.nome, S.cognome D.codice=S.relatore AND S.ciclo=‘laurea sp.’ AND D.cognome=‘Vieri’

(S X D) )

Albero degli operatori della query

Page 45: Basi di Dati

45G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Un Esempio

Non è l’unico possibile

SQL-92 >> Concetti Avanzati >> Esecuzione di una Query SQL

S D

S.nome, S.cognome

D.codice=S.relatore AND S.ciclo=‘laurea sp.’ AND D.cognome=‘Vieri’

X

Piano A S D

S.ciclo=‘laurea sp.’ AND D.cognome=‘Vieri’

S.nome, S.cognome

D.codice=S.relatore

Piano B

Page 46: Basi di Dati

46G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Altri Piani di Esecuzione

SQL-92 >> Concetti Avanzati >> Esecuzione di una Query SQL

S D

S.ciclo= ‘laurea sp.’

S.nome, S.cognome

D.codice=S.relatore

Piano D

D.cognome =‘Vieri’

S

S.ciclo=‘laurea sp.’

S.nome, S.cognome

D

D.codice=S.relatore

Piano C

D.cognome =‘Vieri’

Page 47: Basi di Dati

47G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Ottimizzazione delle Interrogazioni Per effettuare l’ottimizzazione

vengono valutati molti diversi piani di esecuzione alternativi

l’ottimizzatore dispone di statistiche sul contenuto della base di dati (dimensione delle tabelle, dimensione dei record, dimensione degli indici, selettività ecc.)

sulla base delle statistiche viene stimato il costo di ciascun piano di esecuzione (numero di accessi ai blocchi su disco)

SQL-92 >> Concetti Avanzati >> Esecuzione di una Query SQL

Page 48: Basi di Dati

48G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Ottimizzazione delle Interrogazioni

SQL-92 >> Concetti Avanzati >> Esecuzione di una Query SQL

Generatoredei Piani

di Esecuzione

Valutatoredi

Costo

Ana

lizza

tore

Sin

tatt

ico

querySQL

risultato

Statistiche sullabase di datiOttimizzatore

formastandard

della query

Ese

cuto

re

pianodiesec.ottimizzato

Page 49: Basi di Dati

49G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Concetti Avanzati

RaggruppamentiClausole GROUP BY e HAVINGForma Generale della SELECT

NidificazioneUso nel DML e DDLNidificazione, Viste e Potere Espressivo

Esecuzione di una Query SQL

SQL-92 >> Sommario

Page 50: Basi di Dati

50G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

CREATE TABLE Studenti ( matr integer PRIMARY KEY, cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, ciclo char(20), anno integer, relatore char(4) REFERENCES Professori(cod));

CREATE TABLE Professori ( cod char(4) PRIMARY KEY, cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, qualifica char(15), facolta char(10) );

CREATE TABLE Tutorato ( studente integer REFERENCES Studenti(matr), tutor integer REFERENCES Studenti(matr), PRIMARY KEY (studente,tutor));

CREATE TABLE Esami ( studente integer REFERENCES Studenti(matr) ON DELETE cascade ON UPDATE cascade, corso char(3) REFERENCES Corsi(cod), voto integer, lode bool, CHECK (voto>=18 and voto<=30), CHECK (not lode or voto=30), PRIMARY KEY (studente, corso));

CREATE TABLE Corsi ( cod char(3) PRIMARY KEY, titolo varchar(20) NOT NULL, ciclo char(20), docente char(4) REFERENCES Professori(cod) );

CREATE TABLE Numeri ( professore char(4) REFERENCES Professori(cod), numero char(9), PRIMARY KEY (professore,numero));

SQL-92 >> Concetti Avanzati >> Base di Dati di Riferimento

Page 51: Basi di Dati

51G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

SQL-92 >> Concetti Avanzati >> Base di Dati di Riferimento

Tutorato T

studente INTEGER PK, FK

tutor INTEGER PK, FK

Studenti T

matr INTEGER PK

cognome VARCHAR(20)

nome VARCHAR(20)

ciclo CHAR(20)

anno INTEGER

relatore CHAR(4) FK

Professori T

cod CHAR(4) PK

cognome VARCHAR(20)

nome VARCHAR(20)

qualifica CHAR(15)

facolta CHAR(10)

Esami T

corso CHAR(3) PK, FK

studente INTEGER PK, FK

voto INTEGER

lode BOOL

Corsi T

codice CHAR(3) PK

titolo VARCHAR(20)

ciclo CHAR(20)

docente CHAR(4) FK

Numeri T

numero CHAR(9) PK

docente CHAR(4) PK, FK

Page 52: Basi di Dati

52G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

SQL-92 >> Concetti Avanzati >> Base di Dati di Riferimento

cod cognome nome qualifica facolta

FT Totti Francesco ordinario Ingegneria

CV Vieri Christian associato Scienze

ADP Del Piero Alessandro supplente null

Professori

matr cognome nome ciclo anno relatore

111 Rossi Mario laurea tr. 1 null

222 Neri Paolo laurea tr. 2 null

333 Rossi Maria laurea tr. 1 null

444 Pinco Palla laurea tr. 3 FT

77777 Bruno Pasquale laurea sp. 1 FT

88888 Pinco Pietro laurea sp. 1 CV

Studenti

cod titolo ciclo docente

PR1 Programmazione I laurea tr. FT

ASD Algoritmi e Str. Dati laurea tr. CV

INFT Informatica Teorica laurea sp. ADP

Corsi

Page 53: Basi di Dati

53G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

SQL-92 >> Concetti Avanzati >> Base di Dati di Riferimento

studente tutor

111 77777

222 77777

333 88888

444 88888

Tutorato

studente corso voto lode

111 PR1 27 false

222 ASD 30 true

111 INFT 24 false

77777 PR1 21 false

77777 ASD 20 false

88888 ASD 28 false

88888 PR1 30 false

88888 INFT 30 true

Esami

professore numero

FT 0971205145

FT 347123456

VC 0971205227

ADP 0971205363

ADP 338123456

Numeri

Page 54: Basi di Dati

54G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Termini della Licenza

Termini della Licenza

This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.