Linguaggi per basi di dati e SQL
8-12-2011 2
Linguaggi per basi di dati
operazioni sullo schema DDL: data definition language
operazioni sui dati DML: data manipulation language
interrogazione ("query") aggiornamento
8-12-2011 3
Linguaggi di interrogazione per basi di dati relazionali
Dichiarativi specificano le proprietà del risultato ("che
cosa")
Procedurali specificano le modalità di generazione del
risultato ("come")
8-12-2011 4
Linguaggi di interrogazione
Algebra relazionale: procedurale Calcolo relazionale:
dichiarativo (teorico) SQL (Structured Query Language):
parzialmente dichiarativo (reale) QBE (Query by Example):
dichiarativo (reale)
8-12-2011 5
SQL Structured Query Language è un linguaggio con varie funzionalità:
contiene sia il DDL sia il DML
ne esistono varie versioni vediamo gli aspetti essenziali, non i dettagli
8-12-2011 6
SQL: "storia" prima proposta SEQUEL (1974); prime implementazione in SQL/DS e Oracle
(1981) dal 1983 ca., "standard di fatto" standard (1986, poi 1989 e infine 1992)
recepito in parte standard SQL3 imminente
8-12-2011 7
Algebra relazionale
Insieme di operatori su relazioni che producono relazioni e possono essere composti
8-12-2011 8
Operatori dell'algebra relazionale
unione, intersezione, differenza ridenominazione selezione proiezione join (join naturale, prodotto cartesiano)
8-12-2011 9
Operatori insiemistici
le relazioni sono insiemi i risultati debbono essere relazioni è possibile applicare unione,
intersezione, differenza solo a relazioni definite sugli stessi attributi
8-12-2011 10
Laureati Matricola
7432 9824
Età
54 45
Nome
Neri Verdi
7274 42 Rossi
Quadri Matricola
7432 9824
9297 Età
54 45
33 Nome
Neri Verdi
Neri
Laureati ∪ Quadri Matricola Età Nome
7432 54 Neri 9824 45 Verdi 9297 33 Neri
7274 42 Rossi 7432 54 Neri 9824 45 Verdi
7274 42 Rossi 7432 54 Neri 9824 45 Verdi 9297 33 Neri
7432 54 Neri 9824 45 Verdi 9297 33 Neri
7274 42 Rossi
Unione
8-12-2011 11
Laureati Matricola
7432 9824
Età
54 45
Nome
Neri Verdi
7274 42 Rossi
Quadri Matricola
7432 9824
9297 Età
54 45
33 Nome
Neri Verdi
Neri
Laureati ∩ Quadri
Matricola Età Nome 7432 54 Neri 9824 45 Verdi
7432 54 Neri 9824 45 Verdi
7432 54 Neri 9824 45 Verdi
7432 54 Neri 9824 45 Verdi
Intersezione
8-12-2011 12
Laureati Matricola Età Nome
7432 54 Neri 9824 45 Verdi
7274 42 Rossi
Quadri Matricola
7432 9824
9297 Età
54 45
33 Nome
Neri Verdi
Neri
Laureati – Quadri
Matricola Età Nome
7432 54 Neri 9824 45 Verdi
7274 42 Rossi 7432 54 Neri 9824 45 Verdi
7274 42 Rossi
Differenza
8-12-2011 13
Paternità Padre Figlio
Adamo Caino Abramo Isacco
Adamo Abele
Maternità Madre Figlio
Eva Set Sara Isacco
Eva Abele
Paternità ∪ Maternità ??
Una unione sensata ma impossibile
8-12-2011 14
Ridenominazione
operatore monadico (con un argomento)
"modifica lo schema" lasciando inalterata l'istanza dell'operando
8-12-2011 15
Paternità Padre Figlio
Adamo Caino Abramo Isacco
Adamo Abele
REN Genitore ← Padre (Paternità) Padre Figlio
Adamo Caino Abramo Isacco
Adamo Abele Genitore
8-12-2011 16
Paternità Padre Figlio
Adamo Caino Abramo Isacco
Adamo Abele
Maternità Madre Figlio
Eva Set Sara Isacco
Eva Abele
RENGenitore ← Padre (Paternità)
RENGenitore ← Madre (Maternità)
Genitore Figlio
Adamo Caino Abramo Isacco
Adamo Abele
Genitore Figlio
Eva Set Sara Isacco
Eva Abele
8-12-2011 17
RENGenitore ← Padre (Paternità)
RENGenitore ← Madre (Maternità)
Genitore Figlio
Adamo Caino Abramo Isacco
Adamo Abele
Genitore Figlio
Eva Set Sara Isacco
Eva Abele
Genitore Figlio
Adamo Caino Abramo Isacco
Adamo Abele
Eva Set Sara Isacco
Eva Abele
RENGenitore ← Padre (Paternità)
RENGenitore ← Madre (Maternità) ∪
8-12-2011 18
REN Sede, Retribuzione ← Ufficio, Stipendio (Impiegati) REN Sede, Retribuzione ← Fabbrica, Salario (Operai) ∪
Impiegati Cognome
Neri Rossi
Ufficio
Milano Roma
Stipendio
64 55
Operai Cognome
Verdi Bruni
Fabbrica
Latina Monza
Salario
55 45
Cognome Retribuzione Sede
Neri Rossi
64 55
Milano Roma
Verdi Bruni
Latina Monza
55 45
8-12-2011 19
Selezione
operatore monadico (con un argomento)
produce un risultato che ha lo stesso schema dell'operando contiene un sottoinsieme delle ennuple
dell'operando, quelle che soddisfano una condizione
8-12-2011 20
Impiegati Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Rossi Roma 55 7309
Neri Napoli 64 5698 Milano Milano 44 9553
impiegati che guadagnano più di 50 guadagnano più di 50 e lavorano a Milano hanno lo stesso nome della filiale presso cui
lavorano
8-12-2011 21
Selezione, sintassi e semantica
sintassi SEL Condizione (Operando)
Condizione: espressione booleana (come quelle dei vincoli di ennupla)
semantica il risultato contiene le ennuple
dell'operando che soddisfano la condizione
8-12-2011 22
Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Rossi Roma 55 7309
Neri Napoli 64 5698 Milano Milano 44 9553
Impiegati
Milano Milano 44 9553 Neri Napoli 64 5698
impiegati che guadagnano più di 50
SELStipendio > 50 (Impiegati)
8-12-2011 23
Impiegati Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Rossi Roma 55 7309
Neri Napoli 64 5698 Milano Milano 44 9553
impiegati che guadagnano più di 50 e lavorano a Milano
SELStipendio > 50 AND Filiale = 'Milano' (Impiegati)
Rossi Roma 55 7309
Neri Napoli 64 5698 Milano Milano 44 9553
Neri Milano 64 5998
8-12-2011 24
Impiegati Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Rossi Roma 55 7309
Neri Napoli 64 5698 Milano Milano 44 9553
impiegati che hanno lo stesso nome della filiale presso cui lavorano
SEL Cognome = Filiale(Impiegati)
Neri Milano 64 5998 Rossi Roma 55 7309
Neri Napoli 64 5698
Milano Milano 44 9553
8-12-2011 25
Selezione con valori nulli
Cognome Filiale Età Matricola
Neri Milano 45 5998 Rossi Roma 32 7309
Bruni Milano NULL 9553
Impiegati
SEL Età > 40 (Impiegati)
• la condizione atomica è vera solo per valori non nulli
8-12-2011 26
Un risultato non desiderabile SEL Età>30 (Impiegati) ∪ SEL Età≤30 (Impiegati) ≠
Impiegati Perché? Perché le selezioni vengono valutate
separatamente! Ma anche
SEL Età>30 ∨ Età≤30 (Impiegati) ≠ Impiegati Perché? Perché anche le condizioni atomiche
vengono valutate separatamente!
8-12-2011 27
SEL Età > 40 (Impiegati) la condizione atomica è vera solo per
valori non nulli per riferirsi ai valori nulli esistono forme
apposite di condizioni: IS NULL
IS NOT NULL si potrebbe usare (ma non serve) una
"logica a tre valori" (vero, falso, sconosciuto)
8-12-2011 28
A questo punto: SEL Età>30 (Impiegati) ∪ SEL Età≤30
(Impiegati) ∪ SEL Età IS NULL (Impiegati) =
SEL Età>30 ∨ Età ≤ 30 ∨ Età IS NULL (Impiegati) =
Impiegati
8-12-2011 29
Cognome Filiale Età Matricola
Neri Milano 45 5998 Rossi Roma 32 7309
Bruni Milano NULL 9553
Impiegati
Neri Milano 45 5998 Bruni Milano NULL 9553
SEL (Età > 40) OR (Età IS NULL) (Impiegati)
Neri Milano 45 5998 Bruni Milano NULL 9553
8-12-2011 30
Selezione in SQL
select * from Impiegati where Stipendio > 30
Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Rossi Roma 55 7309
Neri Napoli 64 5698 Milano Milano 44 9553
Impiegati
Milano Milano 44 9553 Neri Napoli 64 5698
SELStipendio > 50 (Impiegati) select Matricola, Cognome, Filiale, Stipendio from Impiegati where Stipendio > 30
8-12-2011 31
Selezione in SQL
select * from Impiegati where Stipendio>30 AND Filiale= “Roma“
Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Rossi Roma 55 7309
Neri Napoli 64 5698 Milano Milano 44 9553
Impiegati
SEL(Stipendio > 50) AND (Filiale=“Roma”) (Impiegati)
8-12-2011 32
Selezione in SQL
select * from Impiegati where eta >40 OR eta is NULL
Gli impiegati la cui età è o potrebbe essere maggiore di 40
8-12-2011 33
Ridenominazione in SQL
select Matricola AS Codice, Cognome, Filiale, Stipendio
from Impiegati
Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Rossi Roma 55 7309
Neri Napoli 64 5698 Milano Milano 44 9553
Impiegati
REN(Codice ← Matricola) (Impiegati)
8-12-2011 34
Selezione e proiezione
operatori "ortogonali" selezione:
decomposizione orizzontale
proiezione: decomposizione verticale
8-12-2011 35
selezione
proiezione
8-12-2011 36
Proiezione
operatore monadico produce un risultato che
ha parte degli attributi dell'operando contiene ennuple cui contribuiscono tutte
le ennuple dell'operando
8-12-2011 37
Impiegati Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Neri Napoli 55 7309
Rossi Roma 64 5698 Rossi Roma 44 9553
per tutti gli impiegati: matricola e cognome cognome e filiale
8-12-2011 38
Proiezione, sintassi e semantica
sintassi PROJ ListaAttributi (Operando)
semantica il risultato contiene le ennuple ottenute da
tutte le ennuple dell'operando ristrette agli attributi nella lista
8-12-2011 39
Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Neri Napoli 55 7309
Rossi Roma 64 5698 Rossi Roma 44 9553
Matricola e Cognome di tutti gli impiegati
PROJ Matricola, Cognome (Impiegati)
8-12-2011 40
Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Neri Napoli 55 7309
Rossi Roma 64 5698 Rossi Roma 44 9553
Cognome e Filiale di tutti gli impiegati
PROJ Cognome, Filiale (Impiegati)
8-12-2011 41
Cardinalità delle proiezioni
una proiezione contiene al più tante ennuple quante
l'operando può contenerne di meno
se X è una superchiave di R, allora PROJX(R) contiene esattamente tante ennuple quante R
8-12-2011 42
Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Neri Napoli 55 7309
Rossi Roma 64 5698 Rossi Roma 44 9553
Query SQL: Matricola e Cognome di tutti gli impiegati
PROJ Matricola, Cognome (Impiegati)
SELECT Matricola, Cognome FROM Impiegati
8-12-2011 43
Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Neri Napoli 55 7309
Rossi Roma 64 5698 Rossi Roma 44 9553
Cognome e Filiale di tutti gli impiegati
PROJ Cognome, Filiale (Impiegati)
SELECT Cognome, Filiale FROM Impiegati
8-12-2011 44
Selezione e proiezione
Combinando selezione e proiezione, possiamo estrarre interessanti informazioni da una relazione
8-12-2011 45
Cognome Filiale Stipendio Matricola
Neri Milano 64 5998 Rossi Roma 55 7309
Neri Napoli 64 5698 Milano Milano 44 9553 Milano Milano 44 9553 Neri Napoli 64 5698
Matricola e Cognome degli impiegati che guadagnano più di 50
SELStipendio > 50 (Impiegati) PROJMatricola,Cognome ( )
SELECT Matricola, Cognome FROM Impiegati WHERE Stipendio>50
8-12-2011 46
Esercizi
Matricola e Cognome degli Impiegati della Filiale di Milano con Stipendio maggiore di 60
Matricola (ridenominata a Codice) e Stipendio degli Impiegati della Filiale di Roma.
8-12-2011 47
Considerazioni Combinando selezione e proiezione,
possiamo estrarre informazioni da una relazione
non possiamo però correlare informazioni presenti in relazioni diverse