il linguaggio sql - unibg · sql come query language enrico cavalli anno accademico 2012-2013...

42
Elaborazione Automatica dei Dati SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 2 Il linguaggio SQL SQL = Structured Query Language Diverse versioni del linguaggio gli standard ANSI: SQL, SQL2, SQL3 le versioni proposte dai produttori di DBMS SQL è un linguaggio che permette di: definire uno schema relazionale - DDL modificare la base di dati - DML costruire interrogazioni - QL Le interrogazioni che si costruiscono con SQL sono un’estensione di quelle dell’algebra relazionale Esaminiamo SQL come linguaggio per interrogare il database

Upload: others

Post on 18-Jul-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione Automatica dei Dati

SQL come Query Language

Enrico Cavalli

Anno Accademico 2012-2013

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2

Il linguaggio SQL

• SQL = Structured Query Language

• Diverse versioni del linguaggio

– gli standard ANSI: SQL, SQL2, SQL3– le versioni proposte dai produttori di DBMS

• SQL è un linguaggio che permette di:

– definire uno schema relazionale - DDL– modificare la base di dati - DML– costruire interrogazioni - QL

• Le interrogazioni che si costruiscono con SQL sono un’estensione di quelle dell’algebra relazionale

Esaminiamo SQL come linguaggio per

interrogare il database

Page 2: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Le interrogazioni dell’algebra relazionale con SQL

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 4

Interrogazioni in SQL (1)

• Considerando la base di dati definita dallo schema:

Film ( Titolo, Anno, Lunghezza, aColori, NomeStudio )Attori ( Titolo, Anno, NomeAttore )

• Costruiamo le interrogazioni per ottenere:

– Titolo ed Anno dei film della Fox lunghi almeno 100 minuti

– Tutti gli attributi dei film della Fox lunghi più di 100 minuti

SELECT Titolo, AnnoFROM Film WHERE NomeStudio = ‘Fox’ AND Lunghezza >= 100;

SELECT *FROM Film WHERE NomeStudio = ‘Fox’ AND Lunghezza > 100;

Page 3: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 5

Interrogazioni in SQL (2)

• L’elenco degli attori del film: Moulin Rouge del 2002

• L’elenco degli studi che hanno prodotto i film con Nicole Kidman

Film ( Titolo, Anno, Lunghezza, aColori, NomeStudio )Attori ( Titolo, Anno, NomeAttore )

SELECT NomeAttoreFROM Attori WHERE Titolo = ‘Moulin Rouge’ AND Anno = 2002;

SELECT NomeStudioFROM Film, AttoriWHERE Film.Titolo = Attori.Titolo AND

Film.Anno = Attori.Anno ANDNomeAttore = ‘Nicole Kidman’;

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 6

• I protagonisti dei film che durano almeno 100 minuti

• I protagonisti e la durata in ore dei film che durano più di 100 minuti

Interrogazioni in SQL (3)

SELECT NomeAttoreFROM Film, Attori WHERE Film.Titolo = Attori.Titolo AND

Film.Anno = Attori.Anno AND Lunghezza >= 100;

SELECT NomeAttore, Lunghezza/60 AS DurataFROM Film AS F, Attori AS AWHERE F.Titolo = A.Titolo AND F.Anno = A.Anno

AND Lunghezza > 100;

Film ( Titolo, Anno, Lunghezza, aColori, NomeStudio )Attori ( Titolo, Anno, NomeAttore )

Estensioni rispetto all’algebra relazionale

Page 4: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 7

Condizioni di ricerca (1)

• I film di durata compresa tra 90 e 120 minuti

– Equivale all’interrogazione:

SELECT Titolo, AnnoFROM FilmWHERE Lunghezza Between 90 AND 120;

Film ( Titolo, Anno, Lunghezza, aColori, NomeStudio )Attori ( Titolo, Anno, NomeAttore )

SELECT Titolo, AnnoFROM FilmWHERE Lunghezza>=90 AND Lunghezza<=120;

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 8

Condizioni di ricerca (2)

• I film dove recitano gli attori ‘X’ o ‘Y’ o ’Z’

• Equivale all’interrogazione:

SELECT Titolo, AnnoFROM AttoriWHERE NomeAttore IN (‘X’,‘Y’,‘Z’);

SELECT Titotlo, AnnoFROM AttoriWHERE NomeAttore = ‘X’ OR NomeAttore = ‘Y’ OR

NomeAttore = ‘Z’;

Film ( Titolo, Anno, Lunghezza, aColori, NomeStudio )Attori ( Titolo, Anno, NomeAttore )

Page 5: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 9

Confronto di Stringhe (1)

• Elenco degli impiegati il cui cognome inizia per ‘B’ o per ‘C’

• Si è fatto uso dei caratteri Jolly

– % ( 0 o più caratteri arbitrari )

– _ ( 1 carattere arbitrario )

• In molti SQL sono accettati ? e * al posto di _ e %

Matricola Nome Età Stipendio

101 M.Rossi 34 40103 M.Bianchi 23 35104 L.Neri 38 61105 N.Bini 44 38210 M.Celli 49 60231 S.Bisi 50 60252 N.Bini 44 70301 S.Rossi 34 70375 M.Rossi 50 65

Matricola Nome Età Stipendio

101 M.Rossi 34 40103 M.Bianchi 23 35104 L.Neri 38 61105 N.Bini 44 38210 M.Celli 49 60231 S.Bisi 50 60252 N.Bini 44 70301 S.Rossi 34 70375 M.Rossi 50 65

Matricola Nome Età Stipendio

103 M.Bianchi 23 35

105 N.Bini 44 38

210 M.Celli 49 60

231 S.Bisi 50 60

252 N.Bini 44 70

Matricola Nome Età Stipendio

103 M.Bianchi 23 35

105 N.Bini 44 38

210 M.Celli 49 60

231 S.Bisi 50 60

252 N.Bini 44 70

SELECT *FROM ImpiegatiWHERE Nome LIKE ‘_.B%' OR

Nome LIKE ‘_.C%' ;

Estensione rispetto

all’algebra relazionale

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 10

Confronto di Stringhe (2)

• L’operatore LIKE fa uso di due caratteri speciali:

– _ ( ? ) al posto di un carattere arbitrario

– % ( * ) al posto di n caratteri arbitrari ( n >= 0 )

• Il carattere ‘ (apice) in una stringa è indicato con ‘’ (due apici)

• Una stringa può spesso essere delimitata con “ (doppio apice)

• I caratteri speciali: _ % in una stringa sono indicati con le sequenze di escape , precisando il carattere di escape con ESCAPE

– Nome LIKE ‘%&_%’ ESCAPE ‘&’ Nome deve contenere _

– Valore LIKE ‘%£%’ ESCAPE ‘£’ Valore deve terminare con %

– Titolo LIKE ‘%’’s%’ Titolo deve contenere un genitivosassone

– Valore LIKE ‘_%£%’ ESCAPE ‘£’ Valore deve terminare con % preceduto da almeno un carattere

Page 6: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 11

Ordinamenti

• Elenco degli impiegati il cui cognome inizia per ‘B’ o per ‘C’, ordinato per valori decrescenti di Età:

• ORDER BY Colonna [ ASC | DESC ]

Matricola Nome Età Stipendio

231 S.Bisi 50 60

210 M.Celli 49 60

252 N.Bini 44 70

105 N.Bini 44 38

103 M.Bianchi 23 35

Matricola Nome Età Stipendio

231 S.Bisi 50 60

210 M.Celli 49 60

252 N.Bini 44 70

105 N.Bini 44 38

103 M.Bianchi 23 35

SELECT *FROM ImpiegatiWHERE Nome LIKE ‘_.B%' OR

Nome LIKE ‘_.C%‘ORDER BY Età DESC;

Estensione rispetto

all’algebra relazionale

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 12

• Elenco di tutti i film con titolo anno e nome dello studio

• I film in bianco e nero girati dopo il 1970

• I film della MGM girati dopo il 1970 di durata minore di 90 minuti

Comprendere l’SQL (1)

SELECT Titolo FROM Film WHERE Anno > 1970 AND NOT aColori;

SELECT Titolo FROM Film WHERE ( Anno > 1970 AND Lunghezza < 90 ) AND

NomeStudio = ‘MGM’;

SELECT Titolo, Anno, NomeStudio FROM Film;

Film ( Titolo, Anno, Lunghezza, aColori, NomeStudio )Attori ( Titolo, Anno, NomeAttore )

Page 7: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 13

Comprendere l’SQL (2)

• Elenco dei film girati dopo il 1970 e che contengono ‘love’ nel titolo ordinato per valori crescenti di NomeStudio e, a parità di nome studio, per valori decrescenti di durata

• I film recitati da attori nel cui nome compare la sequenza ‘cruis’

SELECT Titolo, NomeStudio, LunghezzaFROM Film WHERE Anno > 1970 AND Titolo LIKE ‘%love%’ORDER BY NomeStudio, Lunghezza DESC;

SELECT TitoloFROM Film AS F, Attori AS AWHERE A.Titolo = F.Titolo AND A.Anno = F.Anno

AND NomeAttore LIKE ‘%cruis%’;

Film ( Titolo, Anno, Lunghezza, aColori, NomeStudio )Attori ( Titolo, Anno, NomeAttore )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 14

Il comando Select (1)

SELECT

FROM

WHERE

ORDER BY

Quali colonne mostrare, ridenominazioni e calcoli

Da quali tabelle si prelevano i dati

Le condizioni che devono essere soddisfatte da una riga per essere

scelta con il comando SELECT

Le clausole obbligatorie Sono: SELECT e FROM

Deve essere rispettato l’ordine: SELECT – FROM –

WHERE – ORDER BY

Il comando SELECT termina con ;

Ordinamenti

Page 8: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 15

Il comando Select (2)

SELECT

FROM

WHERE

ProiezioniRidenominazioni

Calcoli

Prodotti CartesianiJoin Il Join di tabelle è ottenuto con il

Theta Join : si costruisce il prodotto cartesiano delle tabelle

elencandole nella clausola FROM e si specifica nella

clausola WHERE quali righe scegliere

SelezioniCondizioni di Join

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 16

Date le tabelle: Impiegati ( Matricola, Nome, Età, Stipendio )Supervisione ( Capo, Impiegato )

Matricola Nome Età Stipendio

101 M.Rossi 34 40103 M.Bianchi 23 35104 L.Neri 38 61105 N.Bini 44 38210 M.Celli 49 60231 S.Bisi 50 60252 N.Bini 44 70301 S.Rossi 34 70375 M.Rossi 50 65

Matricola Nome Età Stipendio

101 M.Rossi 34 40103 M.Bianchi 23 35104 L.Neri 38 61105 N.Bini 44 38210 M.Celli 49 60231 S.Bisi 50 60252 N.Bini 44 70301 S.Rossi 34 70375 M.Rossi 50 65

Capo Impiegato

210 101210 103210 104231 105301 210301 231375 252

Capo Impiegato

210 101210 103210 104231 105301 210301 231375 252

1. Nome, Matricola, Età dei dipendenti con stipendio > 40

2. Matricola dei capi degli impiegati che hanno Stipendio > 40

3. Nome e Stipendio dei capi degli impiegati che hanno Stipendio > 40

4. L’elenco degli impiegati che guadagnano più del proprio capo, mostrando Matricola, Nome e Stipendio di ogni impiegato e del capo

Interrogazioni in SQL(1)

Page 9: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 17

• Nome, Matricola, Età degli impiegati con stipendio > 40

• Matricola dei capi degli impiegati con stipendio > 40

Come si è arrivati a questa Select?

Interrogazioni in SQL(2)

SELECT Nome, Matricola, EtàFROM ImpiegatiWHERE Stipendio > 40;

SELECT Supervisione.CapoFROM Impiegati, SupervisioneWHERE Impiegati.Stipendio > 40 AND

Impiegati.Matricola=Supervisione.Impiegato;

Impiegati ( Matricola, Nome, Età, Stipendio )Supervisione ( Capo, Impiegato )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 18

Basta ora visualizzare la matricola del

capo …

• Costruendo la query per passi:

SELECT S.*, I.* FROM Supervisione AS S,

Impiegati AS IWHERE S.Impiegato =

I.Matricola;

Capo Impiegato Matricola Nome Età Stipendio210 101 101 M.Rossi 34 40

210 103 103 M.Bianchi 23 35210 104 104 L.Neri 38 61

231 105 105 N.Bini 44 38

301 210 210 M.Celli 49 60

301 231 231 S.Bisi 50 60375 252 252 N.Bini 44 70

Capo Impiegato Matricola Nome Età Stipendio210 101 101 M.Rossi 34 40

210 103 103 M.Bianchi 23 35210 104 104 L.Neri 38 61

231 105 105 N.Bini 44 38

301 210 210 M.Celli 49 60

301 231 231 S.Bisi 50 60375 252 252 N.Bini 44 70

Capo Impiegato Matricola Nome Età Stipendio210 104 104 L.Neri 38 61

301 210 210 M.Celli 49 60301 231 231 S.Bisi 50 60

375 252 252 N.Bini 44 70

Capo Impiegato Matricola Nome Età Stipendio210 104 104 L.Neri 38 61

301 210 210 M.Celli 49 60301 231 231 S.Bisi 50 60

375 252 252 N.Bini 44 70

SELECT S.*, I.* FROM Supervisione AS S,

Impiegati AS IWHERE S.Impiegato =

I.Matricola AND I.Stipendio > 40;

Interrogazioni in SQL(3)

Page 10: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 19

• Nome e stipendio dei capi degli impiegati che hanno stipendio > 40

SELECT * FROM Impiegati AS C, Supervisione AS S, Impiegati A S IWHERE C.Matricola=S.Capo AND S.Impiegato=I.Matricol a;

C.Matricola C.Nome C.Età C.Stipendio Capo Impiegato I.Mat ricola I.Nome I.Età I.Stipendio210 M.Celli 49 60 210 101 101 M.Rossi 34 40

210 M.Celli 49 60 210 103 103 M.Bianchi 23 35210 M.Celli 49 60 210 104 104 L.Neri 38 61

231 S.Bisi 50 60 231 105 105 N.Bini 44 38

301 S.Rossi 34 70 301 210 210 M.Celli 49 60

301 S.Rossi 34 70 301 231 231 S.Bisi 50 60375 M.Rossi 50 65 375 252 252 N.Bini 44 70

C.Matricola C.Nome C.Età C.Stipendio Capo Impiegato I.Mat ricola I.Nome I.Età I.Stipendio210 M.Celli 49 60 210 101 101 M.Rossi 34 40

210 M.Celli 49 60 210 103 103 M.Bianchi 23 35210 M.Celli 49 60 210 104 104 L.Neri 38 61

231 S.Bisi 50 60 231 105 105 N.Bini 44 38

301 S.Rossi 34 70 301 210 210 M.Celli 49 60

301 S.Rossi 34 70 301 231 231 S.Bisi 50 60375 M.Rossi 50 65 375 252 252 N.Bini 44 70

Capo Impiegato210 101

210 103210 104

231 105

301 210

301 231375 252

Capo Impiegato210 101

210 103210 104

231 105

301 210

301 231375 252

Estendere la tabella con i dati di Capo

Estendere la tabella con i dati di Impiegato

Interrogazioni in SQL(4)

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 20

SELECT C.Nome, C.StipendioFROM Impiegati AS C, Supervisione AS S, Impiegati A S IWHERE C.Matricola = S.Capo AND S.Impiegato = I.Matrico la

AND I.Stipendio > 40;Nome Stipendio

M.Celli 60

S.Rossi 70S.Rossi 70

M.Rossi 65

I DBMS commerciali, per ragioni di efficienza, non controllano se ci

sono righe duplicate, ..

SELECT DISTINCT C.Nome, C.StipendioFROM Impiegati AS C, Supervisione AS S, Impiegati A S IWHERE C.Matricola = S.Capo AND S.Impiegato = I.Matrico la

AND I.Stipendio > 40;Nome Stipendio

M.Celli 60

S.Rossi 70M.Rossi 65

Interrogazioni in SQL(5)

Page 11: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 21

• Impiegati che guadagnano più del proprio capo . . .

SELECT C.Matricola,C.Nome,C.Stipendio,I.Matricola,I .Nome, I.StipendioFROM Impiegati AS C, Supervisione AS S, Impiegati A S IWHERE C.Matricola = S.Capo AND S.Impiegato = I.Matrico la

AND I.Stipendio > C.Stipendio;

Volendo esprimere gli stipendi in euro invece che in milioni di lire ..

SELECT . . INT(C.Stipendio*1000/1.93627) AS StipCapo . . INT(I.Stipendio*1000/1.93627)

FROM . . .

C.Matricola C.Nome C.Stipendio I.Matricola I.Nome I.Stip endio

210 M.Celli 60 104 L.Neri 61375 M.Rossi 65 252 N.Bini 70

C.Matricola C.Nome C.Stipendio I.Matricola I.Nome I.Stip endio

210 M.Celli 60 104 L.Neri 61375 M.Rossi 65 252 N.Bini 70

C.Matricola C.Nome StipCapo I.Matricola I.Nome Expr1005

210 M.Celli 30987 104 L.Neri 31503

375 M.Rossi 33569 252 N.Bini 36151

C.Matricola C.Nome StipCapo I.Matricola I.Nome Expr1005

210 M.Celli 30987 104 L.Neri 31503

375 M.Rossi 33569 252 N.Bini 36151

Interrogazioni in SQL(6)

Prodotto Cartesiano, Join Interni, Join Esterni, Operazioni insiemistiche

Page 12: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 23

Prodotto Cartesiano

• Le tabelle che compaiono nella clausola FROM vengono composte come PRODOTTO CARTESIANO , combinando tutte le righe della prima tabella con tutte le righe della seconda

Padre Paternità.Figlio Madre Maternità.Figlio

Adamo Caino Eva Caino

Adamo Abele Eva Caino

Abramo Isacco Eva Caino

Abramo Ismaele Eva Caino

Adamo Caino Eva Set

Adamo Abele Eva Set

Abramo Isacco Eva Set

Abramo Ismaele Eva Set

Adamo Caino Sara Isacco

Adamo Abele Sara Isacco

Abramo Isacco Sara Isacco

Abramo Ismaele Sara Isacco

Adamo Caino Agar Ismaele

Adamo Abele Agar Ismaele

Abramo Isacco Agar Ismaele

Abramo Ismaele Agar Ismaele

Padre Paternità.Figlio Madre Maternità.Figlio

Adamo Caino Eva Caino

Adamo Abele Eva Caino

Abramo Isacco Eva Caino

Abramo Ismaele Eva Caino

Adamo Caino Eva Set

Adamo Abele Eva Set

Abramo Isacco Eva Set

Abramo Ismaele Eva Set

Adamo Caino Sara Isacco

Adamo Abele Sara Isacco

Abramo Isacco Sara Isacco

Abramo Ismaele Sara Isacco

Adamo Caino Agar Ismaele

Adamo Abele Agar Ismaele

Abramo Isacco Agar Ismaele

Abramo Ismaele Agar Ismaele

Maternità

Madre Figlio

Eva CainoEva SetSara IsaccoAgar Ismaele

Paternità

Padre Figlio

Adamo CainoAdamo AbeleAbramo IsaccoAbramo Ismaele

SELECT *FROM Paternità, Maternità;

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 24

Theta Join

• Il THETA JOIN si ottiene dal Prodotto Cartesiano scrivendo la condizione di Join nella clausola WHERE

• L’esempio mostra un EQUI JOIN• E’ necessaria una proiezione per

eliminare la colonna duplicata e ottenere un JOIN NATURALE

• Nel Join si perde l’associazione tra Adamo e Abele e tra Eva e Set

Maternità

Madre Figlio

Eva CainoEva SetSara IsaccoAgar Ismaele

Paternità

Padre Figlio

Adamo CainoAdamo AbeleAbramo IsaccoAbramo Ismaele

SELECT Padre, P.Figlio, MadreFROM Paternità P, Maternità MWHERE P.Figlio = M.Figlio;

Padre P.Figlio Madre

Adamo Caino Eva

Abramo Isacco Sara

Abramo Ismaele Agar

Page 13: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 25

Join Interni: SQL-2 (1)

• THETA JOIN

SELECT ElencoColonneFROM R [INNER] JOIN S ON CondizioniDiJoinWHERE CondizioniDiSelezione;

• I figli di Adamo e di Eva

SELECT Padre, P.Figlio AS Figli, MadreFROM Paternità P INNER JOIN Maternità M ON

P.Figlio = M.FiglioWHERE Madre = ‘Eva’ AND Padre = ‘Adamo’;

Padre Figli Madre

Adamo Caino Eva

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 26

Join Interni: SQL-2 (2)

• EQUI JOIN

SELECT ElencoColonneFROM R [INNER] JOIN S USING(Col1, Col2, ..)WHERE CondizioniDiSelezione;

• Elenco, con i genitori, dei figli dei quali sono noti entrambi i genitori

SELECT Padre, P.Figlio , MadreFROM Paternità P JOIN Maternità M USING (Figlio);

Padre P.Figlio Madre

Adamo Caino Eva

Abramo Isacco Sara

Abramo Ismaele Agar

Page 14: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 27

Join Interni: SQL-2 (3)

• NATURAL JOIN

SELECT ElencoColonneFROM R NATURAL JOIN S WHERE CondizioniDiSelezione;

• Elenco, con i genitori, dei figli dei quali sono noti entrambi i genitori

SELECT *FROM Paternità NATURAL JOIN Maternità;

Padre Figlio Madre

Adamo Caino Eva

Abramo Isacco Sara

Abramo Ismaele Agar

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 28

Join Esterni (1)

• FULL JOIN: nel Join devono comparire tutte le righe di R e di S; le righe senza corrispondenti sono completate con valori nulli

• LEFT JOIN nel Join compaiono tutte le righe di R . . .

• RIGHT JOIN nel Join compaiono tutte le righe di S . . .

• I Join esterni permettono di estrarre informazioni che i Join interni non riescono a catturare

• In molti SQL mancano il FULL JOIN e il RIGHT JOIN

SELECT ElencoColonneLEFT

FROM R FULL [OUTER] JOIN S ON CondizioniDiJoinRIGHT

WHERE CondizioniDiSelezione;

Page 15: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 29

Join Esterni (2)

• Elenco, con i genitori, dei figli di Adamo (anche se non si conosce la madre):

• Elenco, con i genitori, dei figli di Eva (anche se non si conosce il padre):

SELECT Padre, P.Figlio, MadreFROM Paternità P LEFT JOIN Maternità M ON

P.Figlio = M.FiglioWHERE Padre = ‘Adamo’;

SELECT Padre, M.Figlio, MadreFROM Paternità P RIGHT JOIN Maternità M ON

P.Figlio = M.FiglioWHERE Madre = ‘Eva’;

Padre P.Figlio Madre

Adamo Caino Eva

Adamo Abele

Padre M.Figlio Madre

Adamo Caino Eva

Set Eva

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 30

Join Esterni (3)

• Tutti i figli di Adamo / Eva ( anche se non è noto l’altro genitore ):

• In MySQL, e altri DBMS, il FULL JOIN si costruisce con l’unione di tabelle:

SELECT *FROM Paternità P FULL JOIN Maternità M ON

P.Figlio = M.FiglioWHERE P.Padre = ‘Adamo’ OR M.Madre = ‘Eva’;

( SELECT Padre, P.Figlio AS Figli, MadreFROM Paternità P LEFT JOIN Maternità M ON

P.Figlio = M.FiglioWHERE Padre = 'Adamo')

UNION ( SELECT Padre, M.Figlio AS Figli, Madre

FROM Paternità P RIGHT JOIN Maternità M ON P.Figlio = M.Figlio

WHERE Madre = 'Eva');

Padre Figli Madre

Adamo Caino Eva

Adamo Abele

Set Eva

Page 16: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 31

Valori Nulli (1)

• I Join Esterni sono sorgenti di valori nulli . . .

• Chi sono i dipendenti che lavorano in dipartimenti inesistenti? Quali dipartimenti non hanno dipendenti?

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Bianchi Produzione 20 36 TorinoCarlo Rossi Direzione 80 MilanoFranco Neri Distribuzione 45 NapoliGiuseppe Verdi Marketing 20 40 RomaLorenzo Lanzi Direzione 7 73 GenovaMarco Franco Produzione 20 46 RomaMario Rossi Amministrazione 10 45 MilanoPaola Borroni Amministrazione 75 40 Venezia

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Bianchi Produzione 20 36 TorinoCarlo Rossi Direzione 80 MilanoFranco Neri Distribuzione 45 NapoliGiuseppe Verdi Marketing 20 40 RomaLorenzo Lanzi Direzione 7 73 GenovaMarco Franco Produzione 20 46 RomaMario Rossi Amministrazione 10 45 MilanoPaola Borroni Amministrazione 75 40 Venezia

Anagrafica ( Nome, Cognome, Dipart, Ufficio, Stipendio, Città ) Dipartimenti ( Dipart, Indirizzo, Città )

Dipart Indirizzo Città

Amministrazione Via Tito Livio, 27 MilanoDirezione Via Tito Livio, 27 MilanoDistribuzione Via Segre, 9 RomaProduzione Piazza Lavater, 3 TorinoRicerca Via Morone, 6 Milano

Dipart Indirizzo Città

Amministrazione Via Tito Livio, 27 MilanoDirezione Via Tito Livio, 27 MilanoDistribuzione Via Segre, 9 RomaProduzione Piazza Lavater, 3 TorinoRicerca Via Morone, 6 Milano

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 32

Valori nulli (2)

• I valori nulli si controllano con il predicato: IS NULL

-- ------------------------------------------------- ---- Dipendenti in dipartimenti inesistenti-- ------------------------------------------------- --SELECT Nome, Cognome, A.DipartFROM Anagrafica A LEFT JOIN Dipartimenti D Using (Di part) WHERE D.Dipart IS NULL;

-- ------------------------------------------------- ------- Dipartimenti senza dipendenti-- ------------------------------------------------- -----SELECT D.DipartFROM Anagrafica A RIGHT JOIN Dipartimenti D Using (D ipart) WHERE Cognome IS NULL; -- WHERE Cognome = NULL ���� ERRORE

Page 17: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 33

Valori nulli (3)

• L’assenza di valore nulli si controlla con il predicato: IS NOT NULL

-- ------------------------------------------------- ------- Dipendenti per i quali è noto l’ufficio dove lavor ano-- ------------------------------------------------- -----SELECT Nome, Cognome, Dipart, UfficioFROM Anagrafica WHERE Ufficio IS NOT NULL;

-- ------------------------------------------------- ------- Dipendenti per i quali è noto l’ufficio dove lavor ano-- ------------------------------------------------- -----SELECT Nome, Cognome, Dipart, UfficioFROM Anagrafica WHERE Ufficio <> NULL; Errore

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 34

Valori nulli (4)

Esercizi

• Elencare i figli di Adamo dei quali non si conosce la madre partendo dall’elenco visualizzato nella diapositiva dal titolo: Join Esterni (2) e sfruttando i predicati IS NULL oppure IS NOT NULL

• Elencare i figli di Eva dei quali non si conosce il padre partendo dall’elenco visualizzato nella diapositiva dal titolo: Join Esterni (2) e sfruttando i predicati IS NULL oppure IS NOT NULL

• Elencare i dipendenti in Anagrafica (vedi schema nella diapositiva Valori nulli (1)) dei quali si conosce lo stipendio

• Elencare i dipartimenti (vedi schema nella diapositiva Valori nulli (1)) che mancano dell’indirizzo

Page 18: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 35

• Una strategia per elencare i figli di Eva dei quali non è noto il padre porta a considerare in un primo tempo tutti i figli di Eva

SELECT Figlio FROM MaternitàWHERE Madre='Eva';

Operazioni Insiemistiche (1)

SELECT Padre, Figlio, MadreFROM Paternità NATURAL JOIN MaternitàWHERE Madre='Eva';

Padre Figlio Madre

Adamo Caino Eva

Figlio

Caino

Set

• Quindi i figli di Eva dei quali è noto il padre

Unione IntersezioneDifferenza ?

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 36

• EXCEPT costruisce la differenza tra tabelle

( SELECT Figlio FROM MaternitàWHERE Madre = ‘Eva’ )

EXCEPT( SELECT Figlio

FROM Paternità NATURAL JOIN MaternitàWHERE Madre ='Eva’);

Operazioni Insiemistiche (2)

Figlio

Set

∪∪∪∪ UNION

∩∩∩∩ INTERSECT Spesso Assente

- EXCEPT Spesso Assente

Page 19: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 37

Esercizi Riassuntivi (1)

1. Individuare lo stipendio degli impiegati di cognome ‘Rossi’

2. Estrarre tutte le informazioni sugli impiegati di cognome ‘Rossi’

3. Restituire lo stipendio mensile ( espresso in euro e non in milioni di lire ) degli impiegati di cognome ‘Bianchi’

4. Per tutti gli impiegati estrarre Nome, Cognome e Città dove lavorano

5. Estrarre Nome e Cognome degli impiegati che lavorano nell’ufficio 20 del dipartimento Amministrazione

6. Estrarre i nomi propri degli impiegati di Cognome ‘Rossi’ che lavorano nel dipartimento Amministrazione o nel dipartimento Produzione

7. Estrarre tutte le informazioni sugli impiegati di cognome con una ‘o’ in seconda posizione e terminano per ‘i’

Anagrafica ( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti ( Dipart , Indirizzo, Città )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 38

Esercizi Riassuntivi (2)

8. Estrarre Nome, Cognome e nome del dipartimento degli impiegati che lavorano in città diverse da quelle di residenza

9. Elencare tutti i dati dei dipendenti che lavorano in dipartimenti che hanno sede a Roma

10.Elencare i dipartimenti dove lavorano i dipendenti che risiedono a MiIano

11.Estrarre Nome, Cognome e Retribuzione degli impiegati che lavorano a Milano

12.Elencare i dipartimenti che hanno sede in città dove non risiede alcun dipendente

13.Elencare i dipendenti dell’amministrazione dei quali non è noto lo stipendio

14.Elencare i dipendenti che lavorano a Torino dei quali non è nota la città di residenza

Anagrafica ( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti ( Dipart , Indirizzo, Città )

Page 20: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 39

Esercizi Riassuntivi (3)

La tabella Dipendenti contiene, per ogni dipendente, il codice che lo identifica,il cognome, lo stipendio e il codice del dirigente da cui dipendono

15.Con un comando SELECT realizzare una tabella con tre colonne: nella prima compare il codice del dipendente, nella seconda il suo cognome e nell’ultima il cognome del manager da cui dipendono

16.Elencare i dipendenti che non dipendono da alcun manager

17.Elencare i dipendenti che hanno come manager “Leoni”

18.Elencare i dipendenti che hanno retribuzione maggiore od uguale a quella del rispettivo manager

19.Elencare i dipendenti con Cognome, Stipendio e differenza tra il proprio stipendio e quello del manager da cui dipendono

Dipendenti ( Codice , Cognome, Stipendio, Manager )

Funzioni di Aggregazione e Raggruppamenti

Page 21: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 41

Funzioni di Aggregazione (1)

• Costituiscono un’estensione dell’algebra relazionale

• Sintetizzano i valori di un’intera colonna in un solo valore

• Possono comparire nelle sole clausole SELECT o HAVING

• Aggregazione : producono un solo valore dall’elenco di valori che appaiono in una colonna:

– SUM: la somma dei valori in colonna

– AVG: la media dei valori in colonna

– MIN: il minimo dei valori in colonna

– MAX: il massimo dei valori in colonna

– COUNT: il numero di valori che compaiono in colonna

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 42

Funzioni di Aggregazione (2)

• Somma degli stipendi dei dipendenti che lavorano a Milano

• Viene eseguita come se:

SELECT SUM(Stipendio) AS SommaStipendiFROM Anagrafica JOIN Dipartimenti USING (Dipart)WHERE Dipartimenti.Città = 'Milano';

SELECT StipendioFROM Anagrafica JOIN Dipartimenti USING (Dipart)WHERE Dipartimenti.Città = 'Milano';

Stipendio

4540807340

Alla colonna Stipendio viene applicato SUM

SommaStipendi

278

SommaStipendi

278

Anagrafica ( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti ( Dipart , Indirizzo, Città )

Page 22: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 43

Funzioni di Aggregazione (3)

• Da quante città provengono i dipendenti

SELECT COUNT(DISTINCT Città) AS NumeroCittàFROM Anagrafica;

COUNT (Colonna)

Ignora i valori nulli nella colonna

NumeroCittà

6

SELECT COUNT(Città) AS NumeroCittàFROM Anagrafica;

NumeroCittà

8

Anagrafica( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti( Dipart , Indirizzo, Città )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 44

• Stipendio massimo e numero di dipendenti della sede di Roma

SELECT MAX(Stipendio) AS StipendioMax,COUNT(Stipendio) AS Dipendenti

FROM Anagrafica JOIN Dipartimenti USING (Dipart)WHERE Dipartimenti.Città = 'Roma';

StipendioMax Dipendenti

45 1

Esercizi• Estrarre stipendio massimo, minimo e medio fra quelli di tutti gli impiegati • Estrarre lo stipendio massimo fra i dipendenti che lavorano in amministrazione

• Quanti dipendenti lavorano a Torino?• Quanti dipendenti lavorano in una città differente da quella di residenza?• Chi è il dipendente della direzione con lo stipendio massimo? (Attenzione!!)

Funzioni di Aggregazione (4)

Anagrafica( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti( Dipart , Indirizzo,Città )

Page 23: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 45

Raggruppamenti (1)

• Si presenta, spesso, il problema di aggregare i dati non sull’intera colonna ma su particolari sottoinsiemi di una colonna

-- ----------------------------------------- Media degli stipendi nei dipartimenti-- ---------------------------------------SELECT Dipart AS Dipartimento,

AVG(Stipendio) AS MediaStipendiFROM Anagrafica GROUP BY Dipart;

Dipartimento MediaStipendi

Amministrazione 41,66666667Direzione 76,5Distribuzione 45Produzione 41

Anagrafica( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti( Dipart , Indirizzo,Città )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 46

Raggruppamenti (2)

Dipartimento Stipendio

Produzione 36Direzione 80Distribuzione 45Amministrazione 40Direzione 73Produzione 46Amministrazione 45Amministrazione 40

Dipartimento Stipendio

Amministrazione 40Amministrazione 40Amministrazione 45Direzione 73Direzione 80Distribuzione 45Produzione 46Produzione 36

Dipartimento MediaStipendi

Amministrazione 41,66666667Direzione 76,5Distribuzione 45Produzione 41

-- 1SELECT Dipart, StipendioFROM Anagrafica

-- 2SELECT Dipart, StipendioFROM AnagraficaGROUP BY Dipart

-- 3-- Dopo il raggruppamento la -- funzione di aggregazione -- viene applicata separata--- mente ai diversi insiemi

Page 24: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 47

-- ------------------------------------------------- ------- L’applicazione della funzione di aggregazione ai-- singoli raggruppamenti, passo 3, avviene come se la-- sua valutazione avvenisse nel seguente modo-- ------------------------------------------------- -----

Raggruppamenti (3)

Dipartimento Stipendio

Amministrazione 40Amministrazione 40Amministrazione 45Direzione 73Direzione 80Distribuzione 45Produzione 46Produzione 36

---- 3--SELECT A.Dipart,( SELECT, AVG(Stipendio)

FROM Anagrafica BWHERE A.Dipart=B.Dipart

)FROM Anagrafica AGROUP BY Dipart;

Dipartimento MediaStipendi

Amministrazione 41,66666667Direzione 76,5Distribuzione 45Produzione 41

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 48

• Elencare i produttori con il numero di film prodotti da ciascuno di essi

Raggruppamenti (4)

SELECT * FROM Film, ProduttoriWHERE Produttore = CodProd;

SELECT NomeProduttoreFROM Film, ProduttoriWHERE Produttore = CodProdGROUP BY NomeProduttore;

SELECT NomeProduttore, COUNT(*)FROM Film, ProduttoriWHERE Produttore = CodProdGROUP BY NomeProduttore;

Film ( Titolo ,Anno ,Lunghezza,aColori,NomeStudio, Produttore )

Produttori ( CodProd , NomeProduttore, Indirizzo )

Nella clausola SELECTpossono comparire solo

campi che compaiono anche nella clausola GROUP BY e

funzioni di aggregazione

Page 25: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 49

-- ------------------------------------------------- ----- I dipartimenti che spendono più di 100 in stipendi-- ------------------------------------------------- ---SELECT Dipart, SUM(Stipendio) AS SommaStipendiFROM AnagraficaGROUP BY DipartHAVING SUM(Stipendio) > 100;

Predicati sui gruppi: Having (1)

Dipartimento Stipendio

Amministrazione 40Amministrazione 40Amministrazione 45Direzione 73Direzione 80Distribuzione 45Produzione 46Produzione 36

Dipartimento Stipendio

Amministrazione 40Amministrazione 40Amministrazione 45Direzione 73Direzione 80Distribuzione 45Produzione 46Produzione 36

Dopo il raggruppamento viene valutato il predicato della

clausola HAVING

Dipart SommaStipendi

Amministrazione 125Direzione 153

Dipart SommaStipendi

Amministrazione 125Direzione 153

Anagrafica( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti( Dipart , Indirizzo,Città )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 50

Predicati sui gruppi: HAVING (2)

• Numero di film prodotti dai produttori che hanno cominciato a produrre film prima del 1960

SELECT NomeProduttore, COUNT(*) FROM Film, ProduttoriWHERE Produttore = CodProdGROUP BY NomeProduttoreHAVING Min(anno) < 1960;

HAVING stabilisce condizionisui raggruppamenti generatidalla clausola GROUP BY

SELECT NomeProduttore, COUNT(*) FROM Film, ProduttoriWHERE Produttore = CodProdGROUP BY NomeProduttore;

Film ( Titolo ,Anno ,Lunghezza,aColori,NomeStudio, Produttore )

Produttori ( CodProd , NomeProduttore, Indirizzo )

Page 26: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 51

• Le clausole di un comando SELECT sono:

• SELECT, FROM sono le uniche clausole obbligatorie

• Le diverse clausole, se presenti, devono rispettare l’ordine dell’elenco• Il motore SQL le elabora nel seguente ordine:

FROM � WHERE � GROUP BY � HAVING � SELECT � ORDER BY

Ordine delle clausole

– SELECT– FROM – WHERE– GROUP BY– HAVING– ORDER BY

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 52

Esercizi (1)

• Estrarre i dipartimenti dove non lavorano impiegati di cognome ‘Rossi’

• Determinare lo stipendio massimo del dipartimento Amministrazione

• Stipendio massimo, minimo e medio dei dipendenti che lavorano a Roma

• Dipartimento dell’impiegato che guadagna lo stipendio massimo? (Usare ORDER BY)

• Nome e Cognome dell’impiegato che guadagna lo stipendio minimo (Usare ORDER BY)

• Elenco dei dipartimenti con il numero di dipendenti che vi lavorano

• Da quante città differenti provengono i dipendenti del dipartimento ‘Amministrazione’

• In quanti dipartimenti lavorano i dipendenti che risiedono a ‘Roma’

• Lo stipendio massimo medio e minimo dei dipendenti del dipartimento ‘Marketing’

Anagrafica( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti( Dipart , Indirizzo,Città )

Page 27: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 53

• Trovare la velocità media dei PC

• Trovare la velocità media dei PC che costano più di 1500 Euro

• Trovare il prezzo medio dei PC prodotti da HP

• Trovare il produttore che fornisce almeno tre modelli di PC

• Trovare per ogni produttore il prezzo del PC più costoso

• Trovare la velocità massima dei PC di prezzo inferiore a 1000 Euro

• Elencare i PC di velocità massima di prezzo inferiore a 1000 euro

• Elencare i produttori che hanno PC con HD di almeno 80 GB e prezzo mediocompreso tra 500 e 900 euro

Esercizi (2)

PC( Produttore , Modello )

Caratteristiche( Modello , Velocità, Ram, CD, HD, Prezzo )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 54

Esercizi (3)

• Elenco degli esami registrati nel corso del 2005 con: Nome, Cognome, Matricoladello studente, nome del corso, Nome e Cognome del docente. L’elenco deve essere suddiviso per docente.

• Quanti esami sono stati registrati dal docente: Enrico Cavalli nel corso del 2004 ?

• Estrarre il numero degli esami sostenuti dallo studente con matricola 25374.

• Estrarre la media dei voti dello studente con matricola 25374.

• Elenco dei corsi per i quali non sono stati superati esami

• Elenco dei docenti che non hanno registrato esami nel corso del 2003

• Elenco degli studenti che hanno sostenuto più di 3 esami nel corso del 2005

• Elenco dei laureandi (studenti con almeno 28 esami superati)

• Numero dei corsi insegnati dal docente Enrico Cavalli

• Docenti che sono titolari di almeno 2 corsi

Studenti ( Matricola , Nome, Cognome, Indirizzo )

Corsi ( CodiceCorso , NomeCorso, CodiceDocente )

Docenti ( CodiceDocente , Nome, Cognome )

Esami ( CodiceCorso, Matricola, Data , Voto )

Page 28: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Interrogazioni Nidificate

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 56

Interrogazioni Nidificate (1)

-- ------------------------------- Il nome del capo di M.Celli-- -----------------------------

SELECT Nome FROM ImpiegatiWHERE Matricola =

( SELECT CapoFROM SupervisioneWHERE Impiegato =

( SELECT Matricola FROM ImpiegatiWHERE Nome = ‘M.Celli’ )

);

Si può usare un comando SELECT al posto

di una costante in una clausola WHERE

Impiegati( Matricola , Nome, Età, Stipendio )

Supervisione( Capo, Impiegato )

Matricola

210

Matricola

210

Page 29: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 57

-- ------------------------------- Il nome del capo di M.Celli-- -----------------------------SELECT Nome FROM ImpiegatiWHERE Matricola =

( SELECT CapoFROM SupervisioneWHERE Impiegato = 210 );

SELECT Nome FROM ImpiegatiWHERE Matricola = 310;

Capo

310

Nome

S.Rossi

Interrogazioni Nidificate (2)Impiegati( Matricola , Nome, Età, Stipendio )

Supervisione( Capo, Impiegato )

La matricola di Celli, estratta da Impiegati, è stat a usata in Supervisione per trovare la matricola del capo di Celli. Noto qu esto valore è possibile recuperare il nome del capo di Celli dalla tabella I mpiegati

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 58

• Le interrogazioni nidificate sono un modo concettualmente diverso di costruirele interrogazioni

• Forniscono un metodo alternativo a quello dell’algebra relazionale

• Possono essere utilizzate per semplificare dal punto di vista concettuale la progettazione di interrogazioni complesse

• In molti casi sono insostituibili ...

Interrogazioni Nidificate (3)

-- ------------------------------------------------- ------ Il nome del capo di M.Celli: approccio tradiziona le-- ------------------------------------------------- ----SELECT C.NomeFROM Impiegati AS C, Supervisione AS S, Impiegati A S IWHERE C.Matricola = S.Capo AND S.Impiegato = I.Matrico la

AND I.Nome = ‘M.Celli’;

Impiegati( Matricola , Nome, Età, Stipendio )

Supervisione( Capo, Impiegato )

Page 30: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 59

• Chi è l’impiegato con lo stipendio più elevato?

Interrogazioni Nidificate (4)

SELECT Nome, Cognome FROM Dipendenti WHERE Stipendio = 80;

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Bianchi Produzione 20 36 TorinoCarlo Rossi Direzione 80 MilanoFranco Neri Distribuzione 45 NapoliGiuseppe Verdi Marketing 20 40 RomaLorenzo Lanzi Direzione 7 73 GenovaMarco Franco Produzione 20 46 RomaMario Rossi Amministrazione 10 45 MilanoPaola Borroni Amministrazione 75 40 Venezia

SELECT MAX(Stipendio) FROM Dipendenti;

Max(Stipendio)

80

Nome

Carlo

Cognome

Rossi

SELECT Nome, Cognome FROM Dipendenti WHERE Stipendio =

( SELECT MAX(Stipendio)FROM Dipendenti );

Nome

Carlo

Cognome

Rossi

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 60

• Chi sono gli impiegati con lo stipendio superiore alla media?

• Gli impiegati con lo stipendio superiore alla media e di quanto la superano

Interrogazioni Nidificate (5)

SELECT Nome, Cognome FROM Dipendenti WHERE Stipendio > ( SELECT AVG(Stipendio)

FROM Dipendenti );

SELECT Nome,Cognome,Stipendio - ( SELECT AVG(Stipendio)

FROM Dipendenti )FROM Dipendenti WHERE Stipendio > ( SELECT AVG(Stipendio)

FROM Dipendenti );

• Si osservi che le risposte alle precedenti richieste possono essere ottenute con una serie di interrogazioni o con una sola query nidificata.

Page 31: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 61

• Elencare i capi con tutti i dati

Interrogazioni Nidificate (6)

SELECT *FROM ImpiegatiWHERE Matricola IN ( SELECT DISTINCT Capo

FROM Supervisione );

SELECT *FROM ImpiegatiWHERE Matricola IN (210,231,301,375);

SELECT DISTINCT Capo FROM Supervisione;

Capo

210231301375

Impiegati( Matricola , Nome, Età, Stipendio )

Supervisione( Capo, Impiegato )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 62

• Elencare i dipendenti che non sono capi

Impiegati( Matricola , Nome, Età, Stipendio )

Supervisione( Capo, Impiegato )

Interrogazioni Nidificate (7)

SELECT *FROM ImpiegatiWHERE Matricola NOT IN ( SELECT DISTINCT Capo

FROM Supervisione );

Un elenco di valori prodotto da un comando SELECT p uò essere inserito in una clausola WHERE per essere esaminato con oppo rtuni operatori:

IN, ALL, ANY, ..

Page 32: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 63

Operatori con le sottointerrogazioni (1)

Operatori per esaminare un elenco prodotto da una SELECT:

• s IN Elenco ⇔⇔⇔⇔ ∃x ∈ Elenco ���� x = s

• s NOT IN Elenco ⇔⇔⇔⇔ ∀x ∈ Elenco ���� x ≠ s

• s > ALL Elenco ⇔⇔⇔⇔ ∀x ∈ Elenco ���� s > x (<, <=, <>, .. )

• NOT s > ALL Elenco ⇔⇔⇔⇔ ¬ ( ∀x ∈ Elenco ���� s > x )

• s > ANY Elenco ⇔⇔⇔⇔ ∃x ∈ Elenco ���� s > x (<, <=, <>, .. )

• NOT s > ANY R ⇔⇔⇔⇔ ¬ ( ∃x ∈ Elenco ���� s > x )

• EXIST R ⇔⇔⇔⇔ R ≠ ∅∅∅∅• NOT EXIST R ⇔⇔⇔⇔ R = ∅∅∅∅

• Nella maggior parte dei casi s indica uno scalare, in alcuni casi s può essere una tupla, mentre R rappresenta una tabella,

• ANY sinonimo di SOME

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 64

Operatori con le sottointerrogazioni (2)

• Gli operatori introdotti non sono indipendenti

• s IN Elenco � permette di costruire l’intersezione di tabelle• s NOT IN Elenco � permette di costruire la differenza di tabelle

-- ------------------------------------------------- ----------- I figli di Adamo ed Eva-- ------------------------------------------------- ---------SELECT Figlio FROM MaternitàWHERE Madre = ‘Eva’ AND

Figlio IN ( SELECT Figlio FROM PaternitàWHERE Padre = ‘Adamo’ );

-- ------------------------------------------------- ----------- I figli di Adamo ma non di Eva-- ------------------------------------------------- ---------SELECT Figlio FROM PaternitàWHERE Padre = ‘Adamo’ AND

Figlio NOT IN ( SELECT Figlio FROM MaternitàWHERE Madre = ‘Eva’ );

Page 33: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 65

Operatori con le sottointerrogazioni (3)

-- ----------------------------------------------- Elenco dei dipartimenti che hanno impiegati-- ---------------------------------------------SELECT Dipart, Indirizzo, CittàFROM Dipartimenti DWHERE EXIST ( SELECT *

FROM Anagrafica AWHERE A.Dipart = D.Dipart );

-- -------------------------------------------------- Dipendenti della Ricerca con stipendio maggiore -- di quello di tutti i dipendenti del Marketing-- ------------------------------------------------SELECT Nome, Cognome FROM AnagraficaWHERE Dipart = ‘Ricerca’ AND Stipendio > ALL

( SELECT Stipendio FROM AnagraficaWHERE Dipart = ‘Marketing’ );

Anagrafica( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti( Dipart , Indirizzo,Città )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 66

Esempi (1)

• Database sulle navi. Le navi sono costruite in serie: le navi della stessa serie sono tutte uguali e costituiscono una classe. Il campo Tipo di una certa classe è un carattere ( I, C, P, S, ecc ), che indica il tipo di nave ( Incrociatore, Corazzata, Portaerei, Sommergibile, .. )

– Classi (Classe, Tipo, Paese, Stazza)

– Navi (Nome, Classe, DataVaro)

1. Elencare le nazioni che posseggono sia sommergibili che portaerei• Risolto come intersezione • Approccio tradizionale: congiungendo tabelle

2. Elencare le classi con una sola nave come membro della classe• Senza usare GROUP BY

Page 34: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 67

-- ------------------------------------------------- ----- Nazioni che hanno sia sommergibili che portaerei-- Intersezione realizzata con IN-- ------------------------------------------------- ---SELECT DISTINCT PaeseFROM Classi JOIN Navi USING (Classe)WHERE Tipo = ‘S’ AND

Paese IN ( SELECT DISTINCT PaeseFROM Classi JOIN Navi USING (Classe)WHERE Tipo = ‘P’ );

-- ------------------------------------------------- ----- Ipotesi: se c’è una classe c’è almeno una nave-- ------------------------------------------------- ---SELECT DISTINCT C1.PaeseFROM Classi C1 JOIN Classi C2 USING (Paese)WHERE C1.Tipo = ‘S’ AND C2.Tipo = ‘P’;

Classi( Classe , Tipo, Paese, Stazza )

Navi( Nome , Classe, DataVaro )

Esempi (2)

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 68

Esempi (3)

-- ------------------------------------------------- ------ Le classi con almeno una nave-- ------------------------------------------------- ----SELECT DISTINCT N1.ClasseFROM Navi N1 JOIN Navi N2 USING (Classe)WHERE N1.Nome = N2.Nome; -- ------------------------------------------------- ------- Le classi con più di una nave-- ------------------------------------------------- -----SELECT DISTINCT N1.ClasseFROM Navi N1 JOIN Navi N2 USING (Classe)WHERE N1.Nome <> N2.Nome;-- ------------------------------------------------- ------- Le classi con una sola nave: differenza delle-- precedenti tabelle usando NOT IN -- ------------------------------------------------- -----

Eserciziconcettualmente

difficili

Classi( Classe , Tipo, Paese, Stazza )

Navi( Nome , Classe, DataVaro )

Page 35: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 69

Sottointerrogazioni Complesse (1)

-- ------------------------------------------------- ------- Dipendenti con lo stesso nome di addetti alla Produ zione-- ------------------------------------------------- -----SELECT * FROM Dipendenti WHERE Nome = ANY

( SELECT DISTINCT Nome FROM Dipendenti WHERE Dipart = 'Produzione');

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Bianchi Produzione 20 36 Torino

Carlo Rossi Direzione 80 Milano

Marco Franco Produzione 20 46 Roma

Nome

Carlo

Marco

Così non va bene !

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Bianchi Produzione 20 36 TorinoCarlo Rossi Direzione 80 MilanoFranco Neri Distribuzione 45 NapoliGiuseppe Verdi Marketing 20 40 RomaLorenzo Lanzi Direzione 7 73 GenovaMarco Franco Produzione 20 46 RomaMario Rossi Amministrazione 10 45 MilanoPaola Borroni Amministrazione 75 40 Venezia

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Bianchi Produzione 20 36 TorinoCarlo Rossi Direzione 80 MilanoFranco Neri Distribuzione 45 NapoliGiuseppe Verdi Marketing 20 40 RomaLorenzo Lanzi Direzione 7 73 GenovaMarco Franco Produzione 20 46 RomaMario Rossi Amministrazione 10 45 MilanoPaola Borroni Amministrazione 75 40 Venezia

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 70

Sottointerrogazioni Complesse (2)

• Soluzione : i nomi prodotti dalla query interna non devono comprendere quelli(uguali) ma che provengono dalla medesima riga della query esterna

-- ------------------------------------------------- ---- Query Esterna-- ------------------------------------------------- --SELECT *FROM Dipendenti AS AWHERE Nome = ANY (

-- ------------------------------------------- Query interna-- -----------------------------------------SELECT Nome FROM Dipendenti AS B WHERE Dipart = 'Produzione’ AND

A.Cognome <> B.Cognome );

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Rossi Direzione 80 Milano

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Rossi Direzione 80 Milano

Page 36: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 71

Sottointerrogazioni Complesse (3)

In generale:

• Per ogni riga della query esterna viene valutata la query interna e,successivamente, il predicato della query esterna.

• L’operazione è ripetuta per tutte le righe della query esterna.

Si osservi che si ottiene lo stesso risultato con l’interrogazione:

SELECT A.*FROM Dipendenti A, Dipendenti BWHERE A.Nome = B.Nome AND

A.Cognome <> B.Cognome AND B.Dipart = 'Produzione’;

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 72

Esercizi (1)

1. Il trattato di Washington del 1921 proibì di costruire navi di stazza superiore alle 35000 tonnellate. Si elenchino le navi che violarono il trattato

2. Elencare gli incrociatori italiani varati dopo il 1945

3. Elencare le corazzate di stazza superiore a quella di almeno una portaerei

4. Elencare le portaerei di stazza superiore a quella di qualsiasi corazzata

5. Elencare le nazioni che posseggono sommergibili ma non hanno né portaerei nècorazzate

6. Elencare le classi con almeno due navi come membro della classe

7. Elencare le navi con il medesimo nome

8. Elencare la nave (o le navi) italiane di stazza massima

9. Elencare le navi di stazza maggiore della nave italiana più grande

Classi( Classe , Tipo, Paese, Stazza )Navi( Nome , Classe, DataVaro )

Page 37: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 73

Esercizi (2)

10. Chi si è beccato, anche immeritatamente, il voto più alto nel corso di codice X

11. Elencare gli studenti che hanno sostenuto due volte l’esame di ‘Y’

12. Elencare gli studenti che hanno superato esami con Moriggia o Cavalli

13. Elencare gli esami che non hanno voti superiori a 26

14. Elencare gli studenti che hanno il voto minimo nel corso ‘Z’

15. Elencare i corsi per i quali nessuno studente ha sostenuto esami

16. Elencare i corsi (con Docente e Descrizione) nei quali ci sono studenti che hanno superato il relativo esame con votazione pari a 30

17. Chi sono gli studenti che hanno sostento esami nell’ultimo giorno fra quelli registrati

18. Il corso che ha il numero massimo di esami registrati (Suggerimento: creare una tabella di servizio con corso e numero esami registrati e interrogare quella)

Studenti( Matricola , Nome, Cognome, Indirizzo )

Corsi( Corso , Docente, Descrizione )

Esami( Matricola, Corso, Data , Voto )

Viste Logiche

Page 38: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 75

-- --------------------------------------------------- Ammontare degli stipendi per ogni dipartimento -- -------------------------------------------------CREATE VIEW TotStipendi(Dipartimento,Stipendi) ASSELECT Dipart, SUM(Stipendio)FROM ImpiegatiGROUP BY Dipart;

Viste Logiche (1)

Le VISTE LOGICHE sono tabelle virtuali create dinamicamente con interrogazioni su tabelle reali o altre viste logiche. Le viste logiche sono interrogabili e, sotto opportune condizioni, modificabili: le modifiche apportatealle viste logiche si riflettono sui dati delle tabelle da cui le viste sono derivate

Impiegati( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti( Dipart , Indirizzo, Città )

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 76

-- ------------------------------------------------- ----- Altri Formati: nome colonne per ridenominazione-- ------------------------------------------------- ---CREATE VIEW TotStipendi ASSELECT Dipart AS Dipartimento, SUM(Stipendio) AS Sti pendiFROM ImpiegatiGROUP BY Dipart;-- ------------------------------------------------- ----- Le colonne prendono il nome da quelle selezionate-- ------------------------------------------------- ---CREATE VIEW TotStipendi ASSELECT Dipart, SUM(Stipendio) FROM Impiegati GROUP BY Dipart;

Viste Logiche (2)

Impiegati( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti( Dipart , Indirizzo, Città )

Preferito

Page 39: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 77

Viste Logiche (3)

• Le viste logiche sono tabelle virtuali

• Le viste logiche sono tabelle virtuali generate da una query

• Le viste logiche sono filtri sui dati delle tabelle reali

• Una vista logica esiste nel DB solo come definizione

• Le viste logiche materializzate sono viste logiche sulle quali è statocostruito un indice unico clusterizzato, dette anche viste indicizzate(SQL Server)

• Le viste logiche possono essere interrogate come ogni tabella reale

• Le viste logiche permettono di inserire , modificare e cancellare dati,a condizione che non ci siano aggregazioni, calcoli, ecc.

• Le viste logiche possono essere alla base di altre viste logiche

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 78

Viste Logiche (4)

• Le viste logiche sono utilizzate per:

• Mostrare all’utente i soli dati di cui ha bisogno

• Impedire la visione di dati riservati

• Personalizzare i dati secondo le esigenze dell’utente

• Controllare l’immissione dei dati ( vedi: WITH CHECK OPTION )

• Semplificare concettualmente la progettazione delle interrogazioni

• Realizzare interrogazioni impossibili da costruire diversamente

• Mantenere la compatibilità con le vecchie tabelle dopo che ne èstato modificato lo schema

• Per importare ed esportare dati verso altre applicazioni

• Per combinare dati distribuiti su diversi server

Page 40: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 79

Viste Logiche (5)

-- ------------------------------------------------- ------- Il dipartimento che spende di più in stipendi-- ------------------------------------------------- -----

SELECT Dipartimento FROM TotStipendiWHERE Stipendi = (

SELECT Max(Stipendi)FROM TotStipendi

);

Le VISTE LOGICHE sono utili per:

• Risolvere problemi impossibili da risolvere diversamente

• Semplificare concettualmente la progettazione delle interrogazioni

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 80

Viste Logiche (6)

-- ------------------------------------------------- ------------------ Numero medio di uffici per dipartimento -- ------------------------------------------------- ----------------CREATE VIEW Uffici ASSELECT Dipart AS Dipartimento, COUNT(DISTINCT Uffici o) AS NumUfficiFROM ImpiegatiGROUP BY Dipart;-- Interrogazione della vista logica

SELECT AVG(NumUffici)FROM Uffici;

-- ------------------------------------------------- -------------- Elenco dei dipartimenti con il nome dell’impiegat o-- che ha lo stipendio più elevato nel dipartimento-- ------------------------------------------------- ------------CREATE VIEW MaxStipendi ASSELECT Dipart AS Dipartimento, MAX(Stipendio) AS Sti pendioMaxFROM ImpiegatiGROUP BY Dipart;

Impiegati( Nome , Cognome , Dipart, Ufficio, Stipendio, Città )

Dipartimenti( Dipart , Indirizzo, Città )

Page 41: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 81

Viste Logiche (7)

-- ------------------------------------------------- ------- Interrogazione della vista logica-- ------------------------------------------------- -----SELECT Nome, Cognome, DipartFROM Impiegati WHERE Stipendio = ( SELECT StipendioMax

FROM MaxStipendiWHERE Dipartimento = Dipart );

-- ------------------------------------------------- ------- Altro modo di interrogare la vista logica -- ------------------------------------------------- -----SELECT Nome, Cognome, DipartFROM Impiegati JOIN MaxStipendi ON Dipart = Dipartime nto WHERE Stipendio = StipendioMax;

Impiegati( Nome, Cognome, Dipart, Ufficio, Stipendi o, Città )

Dipartimenti( Dipart, Indirizzo, Città )

Se ci fosse una tabella fatta così e così sarebbe

semplice ottenereil risultato richiesto . . .

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 82

Esercizi (1)

• Definite la vista logica: FilmParamount che comprende gli attributi: Titolo ed Anno dei film girati negli studi “Paramount”

• Estrarre i titoli dei film della Paramount girati negli anni 80

• Estrarre i nomi di tutti gli attori che hano girato film per la Paramount

• Contare i film prodotti dalla Paramount nel 1999

• Elencare il numero di film prodotti ogni anno dalla Paramount negli anni 90

• Identificare i film della Paramount di lunghezza massima

• In che anno la Paramount ha prodotto il maggior numero di film ?

• Qual è lo studio che ha prodotto il maggior numero di film ?

• Quali sono i film con il cast più numeroso?

Film ( Titolo , Anno , Lunghezza, aColori, NomeStudio )

Attori ( Titolo, Anno, NomeAttore )

Page 42: Il linguaggio SQL - Unibg · SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 2 Il linguaggio

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 83

Esercizi (2)

• Determinare numero di movimenti per cliente; preparare l’elenco dei clienti con le spese di tenuta conto, ipotizzando una spesa di 0,04 euro per movimento e che i primi 100 movimenti siano gratuiti.

• Chi è il cliente che ha effettuato il maggior numero di versamenti nel 2006?

• Chi è il cliente che ha prelevato di più a partire dall’inizio del 2007?

• Chi ha effettuato il versamento di maggior importo?

• Chi ha effettuato il maggior numero di operazioni?

• Chi ha effettuato il primo versamento e il primo prelievo?

• Per ogni cliente calcolare la somma dei versamenti e la somma dei prelievi

• Calcolare il saldo del cliente: Maria Bianchi

• Produrre un elenco dei clienti con il relativo saldo

• Chi è il cliente con il saldo massimo?

Anag ( Codice , Cognome, Nome, Indirizzo, Provincia )Movimenti ( Numero , Causale, Data, Importo, Codice )

Causale : ammette i soli valori ‘Pre’,‘Ver’ per indicare prelievi e versamenti

Elaborazione automatica dei dati - Enrico Cavalli -Università di Bergamo 84

Esempio

• Il DB Anagrafica, Dipartimenti

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Bianchi Produzione 20 36 TorinoCarlo Rossi Direzione 80 MilanoFranco Neri Distribuzione 45 NapoliGiuseppe Verdi Marketing 20 40 RomaLorenzo Lanzi Direzione 7 73 GenovaMarco Franco Produzione 20 46 RomaMario Rossi Amministrazione 10 45 MilanoPaola Borroni Amministrazione 75 40 Venezia

Nome Cognome Dipart Ufficio Stipendio Città

Carlo Bianchi Produzione 20 36 TorinoCarlo Rossi Direzione 80 MilanoFranco Neri Distribuzione 45 NapoliGiuseppe Verdi Marketing 20 40 RomaLorenzo Lanzi Direzione 7 73 GenovaMarco Franco Produzione 20 46 RomaMario Rossi Amministrazione 10 45 MilanoPaola Borroni Amministrazione 75 40 Venezia

Anagrafica ( Nome, Cognome, Dipart, Ufficio, Stipendio, Città ) Dipartimenti ( Dipart, Indirizzo, Città )

Dipart Indirizzo Città

Amministrazione Via Tito Livio, 27 MilanoDirezione Via Tito Livio, 27 MilanoDistribuzione Via Segre, 9 RomaProduzione Piazza Lavater, 3 TorinoRicerca Via Morone, 6 Milano

Dipart Indirizzo Città

Amministrazione Via Tito Livio, 27 MilanoDirezione Via Tito Livio, 27 MilanoDistribuzione Via Segre, 9 RomaProduzione Piazza Lavater, 3 TorinoRicerca Via Morone, 6 Milano