Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e...

61
Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo Nesi Dr.sa Michela Paolucci Dr. Emanuele Bellini

Transcript of Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e...

Page 1: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Basi di Dati. Programmazione e gestione di sistemitelematici

Coordinatore: Prof. Paolo NesiDocenti: Prof. Paolo Nesi

Dr.sa Michela Paolucci

Dr. Emanuele Bellini

Page 2: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SQL

� SQL = Structured Query Language –Linguaggio di Interrogazione Strutturato

� Contiene sia istruzioni di DDL (Data Definition Language) sia di DML (Data Manipulation Language)

Page 3: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SQL - storia

� chiamato inizialmente SEQUEL � le prime implementazioni in SQL/DS e Oracle si

anno nel 1981� dal 1983 è diventato uno ' standard di fatto'� standard nel 1986, poi 1989 e quindi nel 1992,

1999� ne esistono diverse implementazioni� lo standard è recepito solo parzialmente

Page 4: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Tipi di dato

� Carattere: singoli caratteri o stringhe, anche di lunghezza variabile

� Bit: singoli booleani o stringhe� Numerici, esatti e approssimati� Data, ora, intervalli di tempo

� Introdotti in SQL:1999:� Boolean

� BLOB, CLOB (binary/character large object): per grandi immagini e testi

Page 5: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Tipi di dato - Access

� Testo: singoli caratteri o stringhe, anche di lunghezza variabile

� Memo: testi lunghi� Numerico

� Data/ora

� Valuta

� Contatore

� Si/No: in pratica valori booleani

Page 6: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Proprieta’ dei campi

�In base al tipo di campo, possono essere imposte ulteriori condizioni sui valori ammessi

�Lo vedremo con la creazione delle tabelle

Page 7: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Definizione tabella

� Istruzione CREATE TABLE: �definisce uno schema di relazione e ne crea

un’istanza vuota�permette di specificare attributi, domini e

vincoli

Page 8: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

CREATE TABLE

� CREATE TABLE studente(MatricolaCHAR(10) PRIMARY KEY, Cognome CHAR(30) NOT NULL, Nome CHAR(30) NOT NULL, DipartCHAR(15) REFERENCES Università(Codice), UNIQUE (Cognome,Nome)

Schema studente(Matricola, Cognome, Nome, Università)

Schema Dipartimento(Codice, NomeDip)

Page 9: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Vincoli intra-relazionali

� NON NULLO

� UNICO

� CHIAVE PRIMARIA (una sola, implicaUNICO e NON NULLO)

Page 10: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Vincoli interrelazionali

� INTEGRITA‘ REFERENZIALE: i valori presentiper un attributo in una certa tabella (slave) devono essere già presenti in un‘altra tabella di riferimento (master)

� E' possibile definire politiche di reazione alla violazione (azioni „compensative“)

� In assenza di politiche specifiche l‘operazione(cancellazione o modifica) che causerebbe la violazione non viene consentita

Page 11: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Esempio

� Definiamo le tabelle relative agli schemi

� Studente(Matricola, Nome, Cognome, DataNascita)

� Corso(Codice, Titolo, Docente)� Esame(Studente, Corso, Data, Voto)

� Quali sono i vincoli che devono essere soddisfatti ?

Page 12: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Operazioni sui dati

� interrogazione: �SELECT

� modifica:� INSERT, DELETE, UPDATE

Page 13: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Istruzione SELECT

� SELECT ListaAttributi� FROM ListaTabelle� [ WHERE Condizione ]

� "target list„: viene effettuata una proiezione delle tupledel risultato su questi attributi

� clausola FROM : una o più tabelle (attenzione al prodotto cartesiano !)

� clausola WHERE : viene effettuata una selezionedelle tuple che soddisfano certe condizioni (NON E’OBBLIGATORIA!)

Page 14: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Nome Età

Persone

Reddito

Andrea 27

Maria 55

Anna 50

Filippo 26

Luigi 50

Franco 60

Olga 30

Sergio 85

Luisa 75

Aldo 25

21

42

35

30

40

20

41

35

87

15

MadreMaternità Figlio

Luisa

Anna

Anna

Maria

Maria

Luisa

Maria

Olga

Filippo

Andrea

Aldo

Luigi

PadrePaternità Figlio

Luigi

Luigi

Franco

Franco

Sergio

Olga

Filippo

Andrea

Aldo

Franco

Page 15: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Proiezione senza selezione

�Nome e reddito di TUTTE le persone (NON TUTTE LE INFORMAZIONI)

� select nome, redditofrom persone

Page 16: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Nome Età

Persone

Reddito

Andrea 27 21

Maria 55 42

Anna 50 35

Filippo 26 30

Luigi 50 40

Franco 60 20

Olga 30 41

Sergio 85 35

Luisa 75 87

Aldo 25 15

21

42

35

30

40

20

41

35

87

15

Reddito

Page 17: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Selezione

�Nome, età e reddito delle persone con menodi trenta anni (TUTTE LE INFORMAZIONI MA SOLO DI CERTE PERSONE)

� select nome, età, redditofrom personewhere eta < 30

Page 18: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Esempio

� La condizione (semplice o complessa) contenuta nella clausola WHERE viene valutatatupla per tupla� Condizione verificata = la tupla entra nel risultato� Condizione non verificata = la tupla non entra nel

risultato

Page 19: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Esempio

selectselect nomenome, , etetàà, , redditoredditofromfrom personepersonewherewhere etaeta < 30< 30

Nome Età

Persone

Reddito

Andrea 27 21

Maria 55 42

Anna 50 35

Filippo 26 30

Luigi 50 40

Franco 60 20

Olga 30 41

Sergio 85 35

Luisa 75 87

Aldo 25 15

Page 20: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Nome Età

Persone

Reddito

Andrea 27 21

Maria 55 42

Anna 50 35

Filippo 26 30

Luigi 50 40

Franco 60 20

Olga 30 41

Sergio 85 35

Luisa 75 87

Aldo 25 15

Andrea 27 21

Aldo 25 15

Filippo 26 30

eta < 30 ? sieta < 30 ? si

eta < 30 ? noeta < 30 ? noeta < 30 ? si

eta < 30 ? no

eta < 30 ? no

eta < 30 ? noeta < 30 ? no

eta < 30 ? no

selectselect nomenome, , etetàà, , redditoredditofromfrom personepersonewherewhere etaeta < 30< 30

Page 21: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Espressioni aritmetiche

� Creare espressioni attraverso l’uso dei soliti operatori aritmetici: +, -, *, /

� Le priorita’ sono quelle standard�Possono essere alterate con l’uso delle

parentesi

Page 22: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Uso espressioni aritmetiche

SQL> SELECT ename, sal, sal+300

2 FROM emp;

ENAME SAL exp

---------- --------- ---------

KING 5000 5300

BLAKE 2850 3150

CLARK 2450 2750

JONES 2975 3275

MARTIN 1250 1550

ALLEN 1600 1900

...

14 rows selected.

Page 23: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Precedenza operatori

SQL> SELECT ename, sal, 12*sal+100

2 FROM emp;

ENAME SAL exp

---------- --------- ----------

KING 5000 60100

BLAKE 2850 34300

CLARK 2450 29500

JONES 2975 35800

MARTIN 1250 15100

ALLEN 1600 19300

...

14 rows selected.

Page 24: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Uso delle parentesi

SQL> SELECT ename, sal, 12*(sal+100)

2 FROM emp;

ENAME SAL exp

---------- --------- -----------

KING 5000 61200

BLAKE 2850 35400

CLARK 2450 30600

JONES 2975 36900

MARTIN 1250 16200

...

14 rows selected.

Page 25: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Alias delle colonne

� Ridenominare il nome di una colonna� Implementa l’operatore � (Ridenominazione)

dell’algebra relazionale� L’alias deve seguire immediatamente il

nome di una colonna (SENZA VIRGOLA)�può essere usata opzionalmente la parola

chiave AS tra il nome della colonna e l’alias � Richiede doppio apice se l’alias ha degli

spazi

Page 26: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Esempio

NAME SALARY

------------- ---------

...

SQL> SELECT ename "Name",

2 sal*12 "Annual Salary"

3 FROM emp;

Name Annual Salary

------------- -------------

...

SQL> SELECT ename AS name, sal salary

2 FROM emp;

Page 27: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Selezione con proiezione�Nome e reddito delle persone con meno di

trenta anni (NON TUTTE LE INFORMAZIONI E SOLO DI CERTE PERSONE)

� select nome, reddito� from persone� where eta < 30

Page 28: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Nome Età

Persone

Reddito

Andrea 27 21

Maria 55 42

Anna 50 35

Filippo 26 30

Luigi 50 40

Franco 60 20

Olga 30 41

Sergio 85 35

Luisa 75 87

Aldo 25 15

Page 29: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Nome Età

Persone

Reddito

Andrea 27 21

Maria 55 42

Anna 50 35

Filippo 26 30

Luigi 50 40

Franco 60 20

Olga 30 41

Sergio 85 35

Luisa 75 87

Aldo 25 15

Andrea 27 21

Aldo 25 15

Filippo 26 30

Andrea 27 21

Aldo 25 15

Filippo 26 30

21

15

30

Reddito

Page 30: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SELECT abbreviazioni

�select nome, reddito

from personewhere eta < 30

select p.nome as nome,

p.reddito as redditofrom persone pwhere p.eta < 30

Page 31: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SELECT con abbreviazioni

� select nome, età, redditofrom personewhere eta < 30

� select *from personewhere eta < 30

Page 32: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Selezione con espressioni

select Reddito/2 as redditoSemestralefrom Personewhere Nome = 'Luigi'

Page 33: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Selezione con condizionecomplessa

select *from personewhere reddito > 25

and (eta < 30 or eta > 60)

Page 34: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Nome Età

Persone

Reddito

Andrea 27

Maria 55

Anna 50

Filippo 26

Luigi 50

Franco 60

Olga 30

Sergio 85

Luisa 75

Aldo 25

21

42

35

30

40

20

41

35

87

15

RISULTATO INTERROGAZIONEPRECEDENTE ??

RICORDIAMO:LE CONDIZIONI VENGONOVERIFICATE RIGA PER RIGA

Page 35: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Operatore LIKE

• LIKE è usato per effettuare ricerche wildcard

di una stringa di valori.

• Le condizioni di ricerca possono conteneresia letterali, caratteri o numeri.

– % denota zero o più caratteri.

– _ denota un carattere.

SQL> SELECT ename

2 FROM emp

3 WHERE ename LIKE 'S%';

Page 36: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Predicato BETWEEN

� Espr1 [NOT] BETWEEN Espr2 AND Espr3

� Equivale a � [NOT] Espr2 ≤Espr1 AND Espr1≤Espr3

Page 37: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Uso operatore IN

� E’ usato per selezionare righe che hanno un attributo che assume valori contenuti in una lista.

SQL> SELECT empno, ename, sal, mgr

2 FROM emp

3 WHERE mgr IN (7902, 7566, 7788);

EMPNO ENAME SAL MGR

--------- ---------- --------- ---------

7902 FORD 3000 7566

7369 SMITH 800 7902

7788 SCOTT 3000 7566

7876 ADAMS 1100 7788

Page 38: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Gestione valori nulli

Cognome Filiale EtàMatricola

Neri Milano 455998

Rossi Roma 327309

Bruni Milano NULL9553

Impiegati

�Gli impiegati la cui età è o potrebbe essere maggiore di 40

Page 39: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Gestione valori nulli

Cognome Filiale EtàMatricola

Neri Milano 455998

Rossi Roma 327309

Bruni Milano NULL9553

Impiegati

Neri Milano 455998

Bruni Milano NULL9553

Neri Milano 455998

Bruni Milano NULL9553

�Gli impiegati la cui età è o potrebbe essere maggiore di 40

select *from impiegatiwhere eta > 40 or eta is null

Page 40: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Gestione valori nulli� Per verificare il valore nullo non si usano i

normali operatori di confronto (= uguale e <> diverso)

� Operatori speciali � IS NULL e IS NOT NULL

WHERE stipendio <> NULLWHERE stipendio <> NULL

WHERE stipendio IS NOT NULLWHERE stipendio IS NOT NULL

Page 41: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Selezione, proiezione e join

� Istruzioni SELECT con una sola relazione nella clausola FROM permettono di realizzare:�selezioni, proiezioni, ridenominazioni (per

modificare temporaneamente il nome di un attributo o di una tabella)

� con più relazioni nella FROM si realizzano prodotti cartesiani e join

Page 42: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SQL e algebra relazionale

� R1(A1,A2) R2(A3,A4)

SELECT R1.A1, R2.A4 FROM R1, R2WHERE R1.A2 = R2.A3

� prodotto cartesiano (FROM)� selezione (WHERE)� proiezione (SELECT)

Page 43: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SQL e algebra relazionale

� R1(A1,A2) R2(A3,A4)

SELECT R1.A1, R2.A4 FROM R1, R2WHERE R1.A2 = R2.A3

πA1,A4 (σA2=A3 (R1 JOIN R2))

Page 44: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

� possono essere necessarie ridenominazioni�nel prodotto cartesiano�nella target list

SELECT X.A1 AS B1, ...FROM R1 X, R2 Y, R1 ZWHERE X.A2 = Y.A3 AND ...

Page 45: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SELECT X.A1 AS B1, Y.A4 AS B2FROM R1 X, R2 Y, R1 ZWHERE X.A2 = Y.A3 AND Y.A4 = Z.A1

δ B1,B2←A1,A4 (π A1,A4 (σ A2 = A3 AND A4 = C1(

R1 JOIN R2 JOIN δ C1,C2 ← A1,A2 (R1))))

�Self JOIN su R1

Page 46: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SQL: esecuzione delle interrogazioni� Le espressioni SQL sono dichiarative =

descrivono il risultato da raggiungere� In pratica, i DBMS eseguono le operazioni

in modo efficiente, ad esempio:�eseguono le selezioni al più presto

�se possibile, eseguono join e non prodotti cartesiani

Page 47: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SQL: specifca delle interrogazioni� I DBMS hanno quindi la capacità di

"ottimizzare" le interrogazioni, questo (di solito) fa in modo che non sia necessario preoccuparsi dell'efficienza quando si esplicita una interrogazione

� È di maggior rilievo preoccuparsi della chiarezza

Page 48: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Proiezione, attenzione

Cognome Filiale StipendioMatricola

Neri Milano 645998

Neri Napoli 557309

Rossi Roma 645698

Rossi Roma 449553

• cognome e filiale di tutti gli impiegati

Page 49: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Cognome Filiale

Neri Milano

Neri Napoli

Rossi Roma

Cognome Filiale

Neri Milano

Neri Napoli

Rossi Roma

Rossi Roma

selectcognome, filiale

from impiegati

select distinctcognome, filiale

from impiegati

Il risultato Il risultato non non èè di tipo insiemisticodi tipo insiemistico, cio, cioèè può contenere duplicatipuò contenere duplicatiPer eliminare i duplicati si usa Per eliminare i duplicati si usa distinctdistinct

Page 50: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Nome Età

Persone

Reddito

Andrea 27

Maria 55

Anna 50

Filippo 26

Luigi 50

Franco 60

Olga 30

Sergio 85

Luisa 75

Aldo 25

21

42

35

30

40

20

41

35

87

15

MadreMaternità Figlio

Luisa

Anna

Anna

Maria

Maria

Luisa

Maria

Olga

Filippo

Andrea

Aldo

Luigi

PadrePaternità Figlio

Luigi

Luigi

Franco

Franco

Sergio

Olga

Filippo

Andrea

Aldo

Franco

Page 51: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Selezione, proiezione e join� I padri di persone che guadagnano più di venti milioni

select distinct paternità.padrefrom persone, paternitawhere persone.reddito > 20

Prodotto cartesiano

Prodotto cartesiano di due tabelle = Prodotto cartesiano di due tabelle = tutte le possibili combinazioni di tupletutte le possibili combinazioni di tuple

Page 52: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Nome Età

Persone

Reddito

Andrea 27

Maria 55

Anna 50

Filippo 26

Luigi 50

Franco 60

Olga 30

Sergio 85

Luisa 75

Aldo 25

21

42

35

30

40

20

41

35

87

15

PadrePaternità Figlio

Sergio

Sergio

Sergio

Sergio

Sergio

Franco

Franco

Franco

Franco

Franco

Sergio

Sergio

Sergio

Sergio

Sergio

Franco

Franco

Franco

Franco

Franco

Luigi Olga

Luigi Olga

Andrea 27

Aldo 25

21

15

… … … … …

Page 53: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Nome Età

Persone

Reddito

Andrea 27

Maria 55

Anna 50

Filippo 26

Luigi 50

Franco 60

Olga 30

Sergio 85

Luisa 75

Aldo 25

21

42

35

30

40

20

41

35

87

15

PadrePaternità Figlio

Sergio

Sergio

Sergio

Sergio

Sergio

Franco

Franco

Franco

Franco

Franco

Sergio

Sergio

Sergio

Sergio

Sergio

Franco

Franco

Franco

Franco

Franco

Luigi Olga

Luigi Olga

Andrea 27

Olga 30

21

41

… … … … …

Franco 60 20Sergio Franco

Olga 30 41Luigi Olga

Page 54: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

select distinct paternità.padrefrom persone, paternitawhere paternità.figlio = persone.nomeand reddito > 20

Condizioni di join

Join = sottoinsieme del prodotto cartesiano Join = sottoinsieme del prodotto cartesiano di due tabelledi due tabelle

select distinct padrefrom persone, paternitawhere figlio = nome and reddito > 20

Ogni nome di attributo compare in una solaOgni nome di attributo compare in una solatabellatabella

Page 55: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Padre e madre di ogni persona

select paternita.figlio,padre, madrefrom maternita, paternita

where paternita.figlio = maternita.figlio

Attenzione ai nomi di attributi che compaiono in piAttenzione ai nomi di attributi che compaiono in piùù tabelletabelle

Page 56: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Ridenominazione�Se vogliamo selezionare gli individui che

guadagnano più dei relativi padri, basta effettuare la seguente query:

select f.nome, f.reddito, p.redditofrom persone p, paternita, persone fwhere p.nome = padre and

figlio = f.nome andf.reddito > p.reddito

Ridenominazione: Ridenominazione: èè pipiùù comodo usare abbreviazioni comodo usare abbreviazioni per i nomi delle tabellaper i nomi delle tabella

Occorre distinguere occorrenze diverse della stessa Occorre distinguere occorrenze diverse della stessa tabellatabella

Page 57: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SELECT, con ridenominazionedel risultato

select figlio, f.reddito as reddito, p.reddito as redditoPadre

from persone p, paternita, persone fwhere p.nome = padre and figlio = f.nome

and f.reddito > p.reddito

Page 58: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Join esplicito� Padre e madre di ogni persona

select paternita.figlio,padre, madrefrom maternita, paternitawhere paternita.figlio = maternita.figlio

select madre, paternita.figlio, padrefrom maternita join paternita on

paternita.figlio = maternita.figlio

Non Non èè sempresempre implementatoimplementato

Page 59: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

SELECT con join esplicito, sintassiSELECT …FROM Tabella { … JOIN Tabella ON CondDiJoin }, …[ WHERE AltraCondizione ]

Page 60: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Ordinamento del risultato� Per ottenere il nome e il reddito delle

persone con meno di trenta anni in ordine alfabetico, basta effettuare la seguente query:

select nome, redditofrom personewhere eta < 30order by nome

Page 61: Basi di Dati. Programmazione e gestione di sistemi telematici · Basi di Dati. Programmazione e gestione di sistemi telematici Coordinatore: Prof. Paolo Nesi Docenti: Prof. Paolo

Persone

Nome Reddito

Andrea 21

Aldo 15

Filippo 30

Persone

Nome Reddito

Andrea 21

Aldo 15

Filippo 30

select nome, redditofrom personewhere eta < 30

select nome, redditofrom personewhere eta < 30order by nome