Sei sulla pagina 1di 326

Basi di dati Introduzione alle basi di dati

Introduzione alle basi di dati

Gestione delle informazioni


Base di dati
Modello dei dati
Indipendenza dei dati
Accesso ai dati
Basi di dati Vantaggi e svantaggi dei DBMS

DB
MG DB
MG
2

Gestione delle informazioni

Le informazioni sono registrate e scambiate in


forme diverse

Introduzione alle basi di dati

DB
MG DB
MG
4

Gestione delle informazioni Sistema informatico

Le informazioni sono registrate e scambiate in Nei sistemi informatici, le informazioni sono


forme diverse rappresentate per mezzo di dati
i dati sono simboli grezzi che devono essere
interpretati e correlati per fornire informazioni
esempio
dati: “Mario Rossi” e
424242
informazione: risultato
della ricerca di un
Nel tempo, sono state introdotte forme di numero di telefono sulla
propria agenda telefonica
organizzazione e codifica delle informazioni
BNCLCU79M44A488D
DB
MG
5 DB
MG
6

Elena Baralis
©2007 Politecnico di Torino 1
Basi di dati Introduzione alle basi di dati

Caratteristiche dei dati

I dati sono molto più stabili nel tempo dei


processi che li gestiscono
esempio
i dati relativi alle applicazioni bancarie hanno una
struttura invariata da decenni
le procedure che li gestiscono variano di anno in
anno Introduzione alle basi di dati
I dati sono una risorsa importante
dell’organizzazione che li gestisce

DB
MG
7 DB
MG

Base di dati DataBase Management System - DBMS

(Definizione generale) Un sistema per la gestione di basi di dati o DBMS


una base di dati è una collezione di dati che (Data Base Management System) è un sistema
rappresenta le informazioni di interesse per un software in grado di gestire collezioni di dati che
sistema informativo siano
(Definizione “tecnica”) grandi
una base di dati è una collezione di dati gestita da condivise
un DBMS persistenti
assicurando la loro affidabilità e privatezza

DB
MG
9 DB
MG
10

Caratteristiche dei DBMS Caratteristiche dei DBMS

Dimensioni molto maggiori della memoria Persistenza dei dati


centrale disponibile tempo di vita non limitato a quello dell’esecuzione
gestione dei dati in memoria secondaria dei programmi che li utilizzano
Condivisione dei dati tra applicazioni ed utenti: Affidabilità dei dati in caso di malfunzionamenti
una base di dati è una risorsa integrata, condivisa hardware e software
da più settori aziendali funzionalità di salvataggio (backup) e ripristino
riduzione della ridondanza dei dati (recovery)
riduzione delle inconsistenze tra i dati Privatezza dei dati
meccanismo di controllo dell’accesso concorrente meccanismi di autorizzazione per abilitare gli utenti

DB
MG
11 DB
MG
12

Elena Baralis
©2007 Politecnico di Torino 2
Basi di dati Introduzione alle basi di dati

Caratteristiche dei DBMS DBMS o file system?

Efficienza Approccio “semplificato” alla gestione dei dati:


capacità di svolgere le operazioni utilizzando un dati memorizzati in modo persistente nella
insieme di risorse (tempo e spazio) accettabile per memoria di massa all’interno di file
gli utenti è possibile memorizzare e ricercare dati
sistema informatico adeguatamente dimensionato semplici meccanismi di accesso (lettura
Efficacia sequenziale)
capacità di rendere produttive le attività degli semplici meccanismi di condivisione (condivisione
utenti in lettura e blocco del file in scrittura)
I DBMS estendono le funzionalità dei file system,
fornendo più servizi in modo integrato

DB
MG
13 DB
MG
14

Modello dei dati

Un modello dei dati è un insieme di concetti


utilizzati per organizzare i dati di interesse e
descriverne la struttura in modo da essere
comprensibile ad un elaboratore
tipi di dato elementari (intero, carattere, ...)
meccanismo di strutturazione per definire strutture
Introduzione alle basi di dati più complesse (costruttore di record, array, …)

DB
MG DB
MG
16

Modello relazionale Modello relazionale

Modello dei dati più diffuso Corsi Codice Nome Docente

Definisce il costruttore di relazione, che organizza M2170 Fondamenti di informatica Verdi


i dati in insiemi di record omogenei (a struttura M4880 Sistemi di elaborazione Bianchi
fissa) F0410 Basi di dati Neri
le relazioni sono rappresentate sotto forma di
tabelle
Docenti Nome Dipartimento Telefono
Verdi Informatica 123456
Bianchi Elettronica 636363
Neri Informatica 414243

DB
MG
17 DB
MG
18

Elena Baralis
©2007 Politecnico di Torino 3
Basi di dati Introduzione alle basi di dati

Altri modelli dei dati Schema e istanza

Prima del modello relazionale, erano utilizzati In una base di dati sono definiti
modelli più vicini alle strutture fisiche di lo schema, che descrive la struttura dei dati
memorizzazione (poco astratti) praticamente invariante nel tempo
modello gerarchico è rappresentato dall’intestazione di ogni tabella
modello reticolare (nome tabella e nomi colonne)

Dopo il modello relazionale Esempio


modello ad oggetti schema della base di dati
XML
Corsi Codice Nome Docente

Docenti Nome Dipartimento Telefono

DB
MG
19 DB
MG
20

Schema e istanza Tipi di modello

In una base di dati sono definiti Modello concettuale


l’istanza, costituita dal contenuto di ogni tabella, permette di rappresentare i dati in modo
cioè dai valori effettivi dei dati indipendente dal modello logico
variabile nel tempo, anche molto rapidamente descrive concetti del mondo reale
è rappresentata dalle righe delle tabelle utilizzato nella fase di progettazione
Esempio esempio: modello Entità-Relazione
istanza della tabella Docenti Modello logico
Verdi Informatica 123456 descrive la struttura dei dati nel DBMS
utilizzato dai programmi che accedono ai dati
Bianchi Elettronica 636363
indipendente dalle strutture fisiche
Neri Informatica 414243
esempio: modello relazionale
DB
MG
21 DB
MG
22

Livelli di astrazione in un DBMS Architettura standard ANSI/SPARC a tre livelli per DBMS

Schema logico
descrizione della base di dati mediante il modello
Utenti Utenti Utenti logico del DBMS
Schema interno
Schema esterno Schema esterno Schema esterno
rappresentazione dello schema logico mediante
strutture fisiche di memorizzazione
Schema logico Schema esterno
descrizione di parti della base di dati, denominate
Schema interno “viste”, che riflette il punto di vista di particolari
utenti
è definita sul modello logico

DB
MG BD 23 DB
MG
24

Elena Baralis
©2007 Politecnico di Torino 4
Basi di dati Introduzione alle basi di dati

Indipendenza dei dati

L’indipendenza dei dati garantisce che gli utenti e


i programmi applicativi che utilizzano una base di
dati possano ignorare i dettagli realizzativi
utilizzati nella costruzione della base di dati
È una conseguenza della suddivisione in livelli di
astrazione
Introduzione alle basi di dati

DB
MG DB
MG
26

Indipendenza dei dati Indipendenza dei dati

Indipendenza fisica Indipendenza logica


consente di interagire con il DBMS in modo consente di interagire con il livello esterno in modo
indipendente dalla struttura fisica dei dati indipendente dal livello logico
l’accesso a una relazione (livello logico o esterno) è possibile modificare il livello logico mantenendo
avviene sempre nello stesso modo, inalterate le strutture esterne (purché le
indipendentemente dalla modalità di corrispondenze siano inalterate)
memorizzazione è possibile aggiungere nuove viste o modificare
è possibile modificare il modo in cui i dati sono viste esistenti senza modificare lo schema logico
memorizzati fisicamente senza influire sui
programmi che utilizzano i dati

DB
MG
27 DB
MG
28

Linguaggi di accesso ai dati

Interfacce amichevoli che permettono di


specificare interrogazioni senza utilizzare un
linguaggio testuale
Linguaggi testuali interattivi (SQL)
Comandi simili a quelli interattivi introdotti in
linguaggi di programmazione tradizionale (C,
Introduzione alle basi di dati C++, COBOL, Java, …), detti linguaggi ospite
Comandi simili a quelli interattivi introdotti in
linguaggi di sviluppo ad hoc, spesso con
funzionalità specifiche (generazione di grafici,
stampe complesse, videate)

DB
MG DB
MG
30

Elena Baralis
©2007 Politecnico di Torino 5
Basi di dati Introduzione alle basi di dati

Linguaggi di accesso ai dati Utenti

Sono divisi in due categorie Database administrator: responsabile del


linguaggi di definizione dei dati (Data Definition controllo (centralizzato) e della gestione della
Language o DDL) utilizzati per definire gli schemi base di dati
logici, esterni e fisici e le autorizzazioni per garantisce prestazioni sufficienti
l’accesso assicura l’affidabilità del sistema
linguaggi di manipolazione dei dati (Data gestisce le autorizzazioni di accesso ai dati
Manipulation Language o DML) utilizzati per
l’interrogazione e l’aggiornamento delle istanze
della base di dati

DB
MG
31 DB
MG
32

Utenti Transazioni

Progettisti e programmatori: definiscono e Programmi che realizzano attività frequenti e


realizzano predefinite
la struttura della base di dati Esempi
i programmi che accedono alla base di dati prenotazione di volo aereo
Utenti: utilizzano la base di dati per le proprie bonifico bancario
attività Generalmente realizzate con l’introduzione di SQL
utenti finali: utilizzano transazioni, cioè programmi all’interno di un linguaggio ospite
che realizzano attività predefinite
utenti casuali: formulano interrogazioni (o
aggiornamenti) non predefinite mediante i
linguaggi interattivi di accesso alla base di dati
DB
MG
33 DB
MG
34

Vantaggi dei DBMS

Dati come risorsa comune di tutta


l’organizzazione
riduzione di ridondanze e inconsistenze
Modello dei dati unificato e preciso della realtà di
interesse per l’organizzazione
Introduzione alle basi di dati Possibile il controllo centralizzato dei dati
standardizzazione, economie di scala
Indipendenza dei dati

DB
MG DB
MG
36

Elena Baralis
©2007 Politecnico di Torino 6
Basi di dati Introduzione alle basi di dati

Svantaggi dei DBMS

Sono prodotti costosi, complessi, che richiedono


investimenti diretti
acquisto del prodotto
investimenti indiretti
acquisizione delle risorse hardware e software
necessarie
conversione delle applicazioni
formazione del personale
Forniscono un insieme di servizi in forma
integrata
non è possibile scorporare servizi inutilizzati che
possono causare riduzioni di prestazioni

DB
MG
37

Elena Baralis
©2007 Politecnico di Torino 7
Basi di dati Modello relazionale

Modello relazionale e algebra relazionale

Modello relazionale
Algebra relazionale

Basi di dati

DB
MG DB
MG

Modello relazionale

Introduzione
Definizioni
Riferimenti tra relazioni
Assenza di valore
Vincoli d’integrità
Modello relazionale e algebra relazionale Chiave primaria
Vincoli di tupla e di dominio
Vincoli d’integrità referenziale

DB
MG DB
MG

Intuizione

Corsi

c1
c2
Modello relazionale

c3

DB
MG DB
MG

Elena baralis
©2007 Politecnico di Torino 1
Basi di dati Modello relazionale

Intuizione Modello relazionale

Corsi Proposto da E.F. Codd nel 1970 per elevare il


c1 livello di astrazione rispetto ai modelli precedenti
M4880 Sistemi di elaborazione Bianchi
indipendenza dei dati

c2 Primi prodotti nel 1981, ora modello dominante


M2170 Fondamenti di informatica Verdi
del mercato dei DBMS
Basato sul concetto matematico di relazione
F0410 Basi di dati Neri ogni relazione è rappresentata in modo informale
c3 per mezzo di una tabella

DB
MG DB
MG

Esempio

Corsi Codice Nome MatrDocente


M2170 Fondamenti di informatica D101
M4880 Sistemi di elaborazione D102
F0410 Basi di dati D321

Docenti Matricola Nome Dipartimento Telefono Modello relazionale


D101 Verdi Informatica 123456
D102 Bianch Elettronica 636363
i
D321 Neri Informatica 414243

DB
MG DB
MG

Definizioni Definizioni

attributi Attributo
nome di una colonna della tabella
Dominio
Corsi Codice Nome MatrDocente insieme di valori che possono essere assunti da un
M2170 Fondamenti di informatica D101 attributo
n-uple M4880 Sistemi di elaborazione D102 N-upla (o tupla)
F0410 Basi di dati D321 riga della tabella
Cardinalità
dominio: insieme dei codici numero di n-uple della relazione
dei corsi tenuti al Politecnico Grado
numero di attributi della relazione
DB
MG DB
MG

Elena baralis
©2007 Politecnico di Torino 2
Basi di dati Modello relazionale

Proprietà

Le n-uple (righe) non sono ordinate


Le n-uple sono distinte tra loro (non esistono
righe duplicate)
Gli attributi non sono ordinati (non è possibile
individuare un attributo mediante la sua
posizione)
Modello relazionale

DB
MG DB
MG

Riferimenti tra relazioni Riferimento basato su valori: esempio

Il modello relazionale è basato sui valori Corsi Codice Nome MatrDocente


i riferimenti tra dati in relazioni diverse sono M2170 Fondamenti di informatica D101
rappresentati per mezzo di valori dei domini
M4880 Sistemi di elaborazione D102
F0410 Basi di dati D321

Docenti Matricola Nome Dipartimento Telefono


D101 Verdi Informatica 123456
D102 Bianchi Elettronica 636363
D321 Neri Informatica 414243

DB
MG DB
MG

Riferimento basato su puntatori: esempio Riferimenti tra relazioni

Corsi Codice Nome MatrDocente Il modello relazionale è basato sui valori


M2170 Fondamenti di informatica i riferimenti tra dati in relazioni diverse sono
rappresentati per mezzo di valori dei domini
M4880 Sistemi di elaborazione
Vantaggi
F0410 Basi di dati
indipendenza dalle strutture fisiche
rappresentazione solo dell’informazione rilevante
Docenti Matricola Nome Dipartimento Telefono maggiore portabilità dei dati tra sistemi diversi
D101 Verdi Informatica 123456 legame non orientato, a differenza dei puntatori
D102 Bianchi Elettronica 636363
D321 Neri Informatica 414243

DB
MG DB
MG

Elena baralis
©2007 Politecnico di Torino 3
Basi di dati Modello relazionale

Informazione incompleta

È possibile che alcune informazioni non siano


disponibili per tutte le n-uple della relazione
Esempio
Studente (Matricola, Cognome,
DataNascita,Telefono, AnnoLaurea)
telefono può essere (temporaneamente?) ignoto
Modello relazionale
per studente ancora non laureato, anno laurea non
definito
per studente appena laureato, anno laurea non
ancora definito o ignoto

DB
MG DB
MG

Assenza di valore Valore nullo

È possibile rappresentare l’assenza di valore Definizione di un valore speciale denominato


mediante un valore “speciale” appartenente al valore nullo (NULL)
dominio (0, stringa nulla, 999, …) non fa parte di alcun dominio
occorre che esista un valore non utilizzato rappresenta sia valore ignoto, sia valore non
(esempio: AnnoLaurea=0, Telefono=?) definito
valori inizialmente non utilizzati potrebbero deve essere utilizzato con cautela (esempio:
diventare necessari (Telefono= 999999) Matricola=NULL?)
nelle applicazioni è necessario trattare
separatamente i valori “speciali”
Rappresentazione non adeguata

DB
MG DB
MG

Vincoli d’integrità

Corsi Codice Nome MatrDocente


M2170 Fondamenti di informatica D101
M4880 Sistemi di elaborazione D102
F0410 Basi di dati D321

Modello relazionale Docenti Matricola Nome Dipartimento Telefono


D101 Verdi Informatica 123456
D102 Bianchi Elettronica 636363
D321 Neri Informatica 414243

DB
MG DB
MG

Elena baralis
©2007 Politecnico di Torino 4
Basi di dati Modello relazionale

Vincoli d’integrità Vincoli d’integrità

Corsi Codice Nome MatrDocente Corsi Codice Nome MatrDocente


M2170 Fondamenti di informatica D101 M2170 Fondamenti di informatica D101
F0410 Sistemi di elaborazione D102 M4880 Sistemi di elaborazione D102
F0410 Basi di dati D321 F0410 Basi di dati D342

Docenti Matricola Nome Dipartimento Telefono Docenti Matricola Nome Dipartimento Telefono
D101 Verdi Informatica 123456 D101 Verdi Informatica 123456
D102 Bianchi Elettronica 636363 D102 Bianchi Elettronica 636363
D321 Neri Informatica 414243 D321 Neri Informatica 414243

DB
MG DB
MG

Vincoli d’integrità Vincoli d’integrità

Corsi Codice Nome MatrDocente Vincolo d’integrità


M2170 Fondamenti di informatica D101 proprietà che deve essere soddisfatta da tutte le
istanze corrette della base di dati
M4880 Sistemi di elaborazione D102
Tipi di vincolo
F0410 Basi di dati D321
vincoli intra-relazionali, definiti sugli attributi di una
sola relazione (esempi: vincoli di unicità, vincoli di
Docenti Matricola Nome Dipartimento Telefono dominio e di n-upla)
D101 Verdi Informatica 123456 vincoli inter-relazionali, definiti su più relazioni
contemporaneamente (esempio: vincoli d’integrità
D102 Bianchi Elettronica 636363
referenziale)
D321 Neri Informatica 000001

DB
MG DB
MG

Identificazione univoca delle n-uple

Studenti
Matricola Nome Cognome DataNascita AnnoImmatricolazione
64655 Marco Rossi 4/8/1978 1998
81999 Luca Bianco 4/8/1978 1999
75222 Marco Rossi 8/3/1979 1998
Modello relazionale Non esistono due studenti con lo stesso valore
per il numero di matricola
il numero di matricola identifica gli studenti

DB
MG DB
MG

Elena baralis
©2007 Politecnico di Torino 5
Basi di dati Modello relazionale

Identificazione univoca delle n-uple Chiave

Studenti Una chiave è un insieme di attributi che


Matricola Nome Cognome DataNascita AnnoImmatricolazione identifica in modo univoco le n-uple di una
64655 Marco Rossi 4/8/1978 1998 relazione
81999 Luca Bianco 4/8/1978 1999 è una proprietà dello schema di una relazione
75222 Marco Rossi 8/3/1979 1998 Definizione formale: un insieme K di attributi è
chiave di una relazione r se
Non esistono due studenti con lo stesso valore la relazione r non contiene due n-uple distinte con
per i dati anagrafici gli stessi valori per K (univocità)
nome, cognome e data di nascita identificano gli K è minimale (cioè non esistono sottoinsiemi
studenti propri di K ancora univoci)

DB
MG DB
MG

Esempi Superchiave

L’attributo Un insieme K di attributi è chiave di una relazione


{Matricola} r se
è univoco e minimale, quindi è una chiave la relazione r non contiene due n-uple distinte con
gli stessi valori per K (univocità)
K è minimale (cioè non esistono sottoinsiemi
L’insieme di attributi propri di K ancora univoci)
{Nome, Cognome, DataNascita} Se è verificata solo la prima proprietà, K è una
è univoco e minimale (nessuno dei suoi superchiave di r
sottoinsiemi è univoco), quindi è una chiave

DB
MG DB
MG

Esempi Chiave primaria

L’insieme di attributi Se una chiave può assumere il valore NULL si


{Matricola,Nome} perde la proprietà di univocità della chiave
è univoco, ma non minimale (l’attributo Matricola è necessario limitare la presenza di valori nulli
nelle chiavi
è univoco anche da solo), quindi è una
superchiave, ma non è una chiave Soluzione
si definisce una chiave di riferimento, che non
ammette valori nulli, detta chiave primaria
L’insieme di attributi
le altre chiavi (chiavi candidate) possono
{DataNascita, AnnoImmatricolazione} ammettere valori nulli
è univoco e minimale: è una proprietà generale? i riferimenti tra dati in relazioni diverse sono
eseguiti mediante la chiave primaria

DB
MG DB
MG

Elena baralis
©2007 Politecnico di Torino 6
Basi di dati Modello relazionale

Vincoli di dominio

Vincolo di dominio
esprime condizioni sul valore assunto da un
singolo attributo di una tupla
può essere un’espressione booleana (and, or, not)
di predicati semplici
esempio: Voto > 0 and Voto  30
Modello relazionale

DB
MG DB
MG

Vincoli di tupla

Vincolo di tupla
esprime condizioni sul valore assunto da singole
tuple, in modo indipendente dalle altre tuple della
relazione
può correlare attributi diversi
può essere un’espressione booleana (and, or, not)
di predicati semplici (confronto tra attributi, tra Modello relazionale
attributi e costanti, ...)
esempio: Prezzo = Costo + PercIVA*Costo

DB
MG DB
MG

Vincoli d’integrità referenziale Vincoli d’integrità referenziale

Informazioni in relazioni diverse sono correlate Informazioni in relazioni diverse sono correlate
attraverso valori comuni di uno o più attributi attraverso valori comuni di uno o più attributi
l’attributo MatrDocente nella relazione Corsi fa
Corsi Codice Nome MatrDocente
riferimento a Matricola nella relazione Docenti
M2170 Fondamenti di informatica D101
I valori assunti da un attributo nella relazione
M4880 Sistemi di elaborazione D102
referenziante devono esistere effettivamente
F0410 Basi di dati D321
come valori di un attributo nell’istanza della
Docenti Matricola Nome Dipartimento Telefono relazione referenziata
D101 Verdi Informatica 123456 i valori assunti dall’attributo MatrDocente nella
relazione Corsi devono esistere come valori
D102 Bianchi Elettronica 636363
dell’attributo Matricola nelle relazione Docente
D321 Neri Informatica 414243
DB
MG DB
MG

Elena baralis
©2007 Politecnico di Torino 7
Basi di dati Modello relazionale

Vincoli d’integrità referenziale Vincoli d’integrità referenziale

Vincolo d’integrità referenziale I vincoli d’integrità referenziale sono


date due relazioni fondamentali per garantire la correttezza dei
R (relazione referenziata) riferimenti (riferimento basato sui valori)
S, che fa riferimento ad R mediante l’insieme di
attributi X (relazione referenziante)
i valori assunti dall’insieme X di S possono essere
esclusivamente valori assunti effettivamente dalla
chiave primaria di R
L’insieme di attributi X di S costituisce una chiave
esterna (o foreign key) di S

DB
MG DB
MG

Esempio Esempio

Volo Sigla Data Volo Sigla Data


AZ111 16/10/1996 AZ111 16/10/1996
AZ234 4/12/1998 AZ234 4/12/1998
AZ543 9/3/2000 AZ543 9/3/2000

Biglietto Sigla Data NumPosto Persona Biglietto Sigla Data NumPosto Persona
AZ111 16/10/1996 23 Mario Rossi AZ111 16/10/1996 23 Mario Rossi
AZ111 16/10/1996 56 Luca Bianco AZ111 16/10/1996 56 Luca Bianco
AZ234 4/12/1998 9 Marco Neri AZ234 4/12/1998 9 Marco Neri
AZ234 4/12/1998 11 Laura Verdi AZ234 4/12/1998 11 Laura Verdi
AZ234 4/12/1998 21 Paolo Rossi AZ234 4/12/1998 21 Paolo Rossi
DB
MG DB
MG

Esempio Esempio

Volo Sigla Data Volo Sigla Data


AZ111 16/10/1996 AZ111 16/10/1996
AZ234 4/12/1998 AZ234 4/12/1998
AZ543 9/3/2000 AZ543 9/3/2000

Biglietto Sigla Data NumPosto Persona Biglietto Sigla Data NumPosto Persona
AZ111 16/10/1996 23 Mario Rossi AZ111 16/10/1996 23 Mario Rossi
AZ111 16/11/1996 56 Luca Bianco AZ111 16/10/1996 56 Luca Bianco
AZ234 4/12/1998 9 Marco Neri AZ234 4/12/1998 9 Marco Neri
AZ234 4/12/1998 11 Laura Verdi AZ234 4/12/1998 11 Laura Verdi
AZ234 4/12/1998 21 Paolo Rossi AZ543 4/12/1998 21 Paolo Rossi
DB
MG DB
MG

Elena baralis
©2007 Politecnico di Torino 8
Basi di dati Algebra relazionale

Algebra relazionale

Introduzione
Selezione e proiezione
Prodotto cartesiano e join
Natural join, theta-join e semi-join
Outer join
Modello relazionale e algebra relazionale Unione e intersezione
Differenza e antijoin
Divisione e altri operatori

DB DB
MG
MG
2

Algebra relazionale

Estende l’algebra degli insiemi per il modello


relazionale
Definisce un insieme di operatori che operano su
relazioni e producono come risultato una
relazione
Gode della proprietà di chiusura
Algebra relazionale
il risultato di qualunque operazione algebrica su
relazioni è a sua volta una relazione

DB DB
MG
MG
4

Operatori dell’algebra relazionale Operatori dell’algebra relazionale

Operatori unari Operatori insiemistici


selezione (s) unione ()
proiezione (p) intersezione ()
Operatori binari differenza (-)
prodotto cartesiano () prodotto cartesiano ()
join ( ) Operatori relazionali
unione () selezione (s)
intersezione () proiezione (p)
differenza (-) join ( )
divisione (/) divisione (/)

DB
MG
5 DB
MG
6

Elena Baralis
©2007 Politecnico di Torino 1
Basi di dati Algebra relazionale

Relazioni d’esempio

Corsi Codice NomeCorso Semestre MatrDocente


M2170 Informatica 1 1 D102
M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
F0410 Basi di dati 2 D102
Algebra relazionale
Docenti MatrDocente NomeDoc Dipartimento
D102 Verdi Informatica
D105 Neri Informatica
D104 Bianchi Elettronica
DB
MG DB
MG
7

Selezione Selezione: esempio

La selezione estrae un sottoinsieme “orizzontale” Trovare i corsi tenuti nel secondo semestre
della relazione
opera una decomposizione orizzontale della
relazione

DB
MG
9 DB
MG
10

Selezione: esempio Selezione: definizione

Corsi Codice NomeCorso Semestre MatrDocente R = spA


M2170 Informatica 1 1 D102 La selezione genera una relazione R
M4880 Sistemi digitali 2 D104 avente lo stesso schema di A
F1401 Elettronica 1 D104 contenente tutte le tuple della relazione A per cui
F0410 Basi di dati 2 D102 è vero il predicato p
Il predicato p è un’espressione booleana
(operatori ) di espressioni di confronto tra
attributi o tra attributi e costanti
R Codice NomeCorso Semestre MatrDocente p: Città=‘Torino’  Età>18
M4880 Sistemi digitali 2 D104 p: DataRestituzione>DataConsegna+10
F0410 Basi di dati 2 D102
DB
MG
11 DB
MG
12

Elena Baralis
©2007 Politecnico di Torino 2
Basi di dati Algebra relazionale

Selezione: esempio Proiezione

Trovare i corsi tenuti nel secondo semestre La proiezione estrae un sottoinsieme “verticale”
R = sSemestre=2Corsi della relazione
R opera una decomposizione verticale della
sSemestre=2 relazione

Corsi
Corsi Codice NomeCorso Semestre MatrDocente
M2170 Informatica 1 1 D102
M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
F0410 Basi di dati 2 D102
DB
MG
13 DB
MG
14

Proiezione: esempio (n. 1) Proiezione: esempio (n. 1)

Trovare il nome dei docenti Docenti MatrDocente NomeDoc Dipartimento


D102 Verdi Informatica
D105 Neri Informatica
D104 Bianchi Elettronica

DB
MG
15 DB
MG
16

Proiezione: esempio (n. 1) Proiezione: definizione

Docenti MatrDocente NomeDoc Dipartimento R = pLA


D102 Verdi Informatica La proiezione genera una relazione R
D105 Neri Informatica avente come schema la lista di attributi L
D104 Bianchi Elettronica (sottoinsieme dello schema di A)
contenente tutte le tuple presenti in A

R NomeDoc
Verdi
Neri
DB
MG
Bianchi 17 DB
MG
18

Elena Baralis
©2007 Politecnico di Torino 3
Basi di dati Algebra relazionale

Proiezione: esempio (n. 1) Proiezione: esempio (n. 2)

Trovare il nome dei docenti Trovare i nomi dei dipartimenti in cui è


R presente almeno un docente
pNomeDoc R = pNomeDocDocenti R
pDipartimento R = pDipartimentoDocenti
Docenti
Docenti

Docenti MatrDocente NomeDoc Dipartimento


D102 Verdi Informatica
D105 Neri Informatica
D104 Bianchi Elettronica
DB
MG
19 DB
MG
20

Proiezione: esempio (n. 2) Proiezione: definizione

Docenti MatrDocente NomeDoc Dipartimento R = pLA


D102 Verdi Informatica La proiezione genera una relazione R
D105 Neri Informatica avente come schema la lista di attributi L
D104 Bianchi Elettronica (sottoinsieme dello schema di A)
contenente tutte le tuple presenti in A
Sono eliminati gli eventuali duplicati dovuti
all’esclusione degli attributi non in L
se L include una chiave candidata, non vi sono
R Dipartimento
duplicati
Informatica
Elettronica
DB
MG
21 DB
MG
22

Selezione+proiezione: esempio Selezione+proiezione: esempio

Selezionare il nome dei corsi nel secondo Corsi Codice NomeCorso Semestre MatrDocente
semestre M2170 Informatica 1 1 D102
M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
F0410 Basi di dati 2 D102

Selezione

Codice NomeCorso Semestre MatrDocente


M4880 Sistemi digitali 2 D104
F0410 Basi di dati 2 D102
DB
MG
23 DB
MG

Elena Baralis
©2007 Politecnico di Torino 4
Basi di dati Algebra relazionale

Selezione+proiezione: esempio Selezione+proiezione: esempio

Trovare il nome dei corsi R


Codice NomeCorso Semestre MatrDocente nel secondo semestre pNomeCorso
M4880 Sistemi digitali 2 D104
sSemestre=2
F0410 Basi di dati 2 D102 R = pNomeCorso(sSemestre=2Corsi)
Corsi
Proiezione
Corsi
R NomeCorso Codice NomeCorso Semestre MatrDocente
Sistemi digitali M2170 Informatica 1 1 D102
Basi di dati M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
DB
MG
25 DB
MG F0410 Basi di dati 2 D102 26

Selezione+proiezione: esempio (corretto?) Selezione+proiezione: soluzione errata

Trovare il nome dei corsi R Corsi Codice NomeCorso Semestre MatrDocente


nel secondo semestre sSemestre=2 M2170 Informatica 1 1 D102
pNomeCorso M4880 Sistemi digitali 2 D104
R = sSemestre=2 (pNomeCorsoCorsi) F1401 Elettronica 1 D104
Corsi F0410 Basi di dati 2 D102

Corsi Proiezione
Codice NomeCorso Semestre MatrDocente NomeCorso
M2170 Informatica 1 1 D102 Informatica 1
M4880 Sistemi digitali 2 D104 Sistemi digitali
F1401 Elettronica 1 D104 Elettronica
DB
MG F0410 Basi di dati 2 D102 27 DB
MG Basi di dati 28

Selezione+proiezione: soluzione errata Selezione+proiezione: soluzione errata

NomeCorso Trovare il nome dei corsi R


nel secondo semestre sSemestre=2
Informatica 1
Sistemi digitali pNomeCorso
Elettronica R = sSemestre=2 (pNomeCorsoCorsi)
Basi di dati
Corsi

Corsi
L’attributo Semestre non esiste più
Codice NomeCorso Semestre MatrDocente
non è più disponibile l’informazione relativa al M2170 Informatica 1 1 D102
semestre
M4880 Sistemi digitali 2 D104
non si può eseguire l’operazione di selezione
F1401 Elettronica 1 D104
DB
MG
29 DB
MG F0410 Basi di dati 2 D102 30

Elena Baralis
©2007 Politecnico di Torino 5
Basi di dati Algebra relazionale

Prodotto cartesiano

Il prodotto cartesiano di due relazioni A e B


genera tutte le coppie formate da una tupla di A
e una tupla di B

Algebra relazionale

DB DB
MG
MG
32

Prodotto cartesiano: esempio Prodotto cartesiano: esempio

Trovare il prodotto cartesiano tra Corsi e Docenti Corsi Codice NomeCorso Semestre MatrDocente
M2170 Informatica 1 1 D102
M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
F0410 Basi di dati 2 D102

Docenti MatrDocente NomeDoc Dipartimento


D102 Verdi Informatica
D105 Neri Informatica
D104 Bianchi Elettronica
DB
MG
33 DB
MG
34

Prodotto cartesiano: esempio Prodotto cartesiano: esempio


R R
Corsi. Corsi. Corsi. Corsi. Docenti. Docenti. Docenti. Corsi. Corsi. Corsi. Corsi. Docenti. Docenti. Docenti.
Codice NomeCorso Semestre MatrDocente MatrDocente NomeDoc Dipartimento Codice NomeCorso Semestre MatrDocente MatrDocente NomeDoc Dipartimento
M2170 Informatica 1 1 D102 D102 Verdi Informatica M2170 Informatica 1 1 D102 D102 Verdi Informatica
M2170 Informatica 1 1 D102 D105 Neri Informatica M2170 Informatica 1 1 D102 D105 Neri Informatica
M2170 Informatica 1 1 D102 D104 Bianchi Elettronica M2170 Informatica 1 1 D102 D104 Bianchi Elettronica
M4880 Sistemi digitali 2 D104 D102 Verdi Informatica
M4880 Sistemi digitali 2 D104 D105 Neri Informatica
M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica

DB
MG
35 DB
MG
36

Elena Baralis
©2007 Politecnico di Torino 6
Basi di dati Algebra relazionale

Prodotto cartesiano: esempio Prodotto cartesiano: definizione


R
Corsi. Corsi. Corsi. Corsi. Docenti. Docenti. Docenti.
R=AB
Codice NomeCorso Semestre MatrDocente MatrDocente NomeDoc Dipartimento
Il prodotto cartesiano di due relazioni A e B
M2170 Informatica 1 1 D102 D102 Verdi Informatica
M2170 Informatica 1 1 D102 D105 Neri Informatica
genera una relazione R
M2170 Informatica 1 1 D102 D104 Bianchi Elettronica avente come schema l’unione degli schemi di A e
M4880 Sistemi digitali 2 D104 D102 Verdi Informatica di B
M4880 Sistemi digitali 2 D104 D105 Neri Informatica
contenente tutte le coppie formate da una tupla di
M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica
A e una tupla di B
F1401 Elettronica 1 D104 D102 Verdi Informatica
F1401 Elettronica 1 D104 D105 Neri Informatica Il prodotto cartesiano è
F1401 Elettronica 1 D104 D104 Bianchi Elettronica
commutativo
F0410 Basi di dati 2 D102 D102 Verdi Informatica
AB=BA
F0410 Basi di dati 2 D102 D105 Neri Informatica
F0410 Basi di dati 2 D102 D104 Bianchi Elettronica associativo
DB
MG
37 DB
MG
(A  B)  C = A  (B  C) 38

Prodotto cartesiano: esempio Legame tra attributi


R
Trovare il prodotto cartesiano tra Corsi e Docenti Corsi. Corsi. Corsi. Corsi. Docenti. Docenti. Docenti.
Codice NomeCorso Semestre MatrDocente MatrDocente NomeDoc Dipartimento
M2170 Informatica 1 1 D102 D102 Verdi Informatica
R R = Corsi  Docenti M2170 Informatica 1 1 D102 D105 Neri Informatica
M2170 Informatica 1 1 D102 D104 Bianchi Elettronica
M4880 Sistemi digitali 2 D104 D102 Verdi Informatica
M4880 Sistemi digitali 2 D104 D105 Neri Informatica

Corsi Docenti M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica


F1401 Elettronica 1 D104 D102 Verdi Informatica
F1401 Elettronica 1 D104 D105 Neri Informatica
F1401 Elettronica 1 D104 D104 Bianchi Elettronica
F0410 Basi di dati 2 D102 D102 Verdi Informatica
F0410 Basi di dati 2 D102 D105 Neri Informatica
F0410 Basi di dati 2 D102 D104 Bianchi Elettronica

DB
MG
39 DB
MG
40

Join Join: esempio

Il join di due relazioni A e B genera tutte le Trovare le informazioni sui corsi e sui docenti che
coppie formate da una tupla di A e una tupla di B li tengono
“semanticamente legate”

DB
MG
41 DB
MG
42

Elena Baralis
©2007 Politecnico di Torino 7
Basi di dati Algebra relazionale

Join: esempio Join: esempio

Corsi Codice NomeCorso Semestre MatrDocente Corsi. Corsi. Corsi. Corsi. Docenti. Docenti. Docenti.
Codice NomeCorso Semestre MatrDocente MatrDocente NomeDoc Dipartimento
M2170 Informatica 1 1 D102
M2170 Informatica 1 1 D102 D102 Verdi Informatica
M4880 Sistemi digitali 2 D104 M2170 Informatica 1 1 D102 D105 Neri Informatica

F1401 Elettronica 1 D104 M2170 Informatica 1 1 D102 D104 Bianchi Elettronica


M4880 Sistemi digitali 2 D104 D102 Verdi Informatica
F0410 Basi di dati 2 D102
M4880 Sistemi digitali 2 D104 D105 Neri Informatica
M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica
F1401 Elettronica 1 D104 D102 Verdi Informatica
Docenti MatrDocente NomeDoc Dipartimento F1401 Elettronica 1 D104 D105 Neri Informatica
D102 Verdi Informatica F1401 Elettronica 1 D104 D104 Bianchi Elettronica
F0410 Basi di dati 2 D102 D102 Verdi Informatica
D105 Neri Informatica
F0410 Basi di dati 2 D102 D105 Neri Informatica
D104 Bianchi Elettronica F0410 Basi di dati 2 D102 D104 Bianchi Elettronica

DB
MG
43 DB
MG
44

Join: esempio Join: esempio


R R
Corsi. Corsi. Corsi. Corsi. Docenti. Docenti. Docenti. Corsi. Corsi. Corsi. Corsi. Docenti. Docenti. Docenti.
Codice NomeCorso Semestre MatrDocente MatrDocente NomeDoc Dipartimento Codice NomeCorso Semestre MatrDocente MatrDocente NomeDoc Dipartimento
M2170 Informatica 1 1 D102 D102 Verdi Informatica M2170 Informatica 1 1 D102 D102 Verdi Informatica
M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica
F1401 Elettronica 1 D104 D104 Bianchi Elettronica F1401 Elettronica 1 D104 D104 Bianchi Elettronica
F0410 Basi di dati 2 D102 D102 Verdi Informatica F0410 Basi di dati 2 D102 D102 Verdi Informatica

Nota bene: il docente (D105,Neri,Informatica),


che non tiene alcun corso, non compare nel
risultato del join

DB
MG
45 DB
MG
46

Join: definizione

Il join è un operatore derivato


può essere espresso utilizzando gli operatori , sp,
pL
Il join è definito separatamente perché esprime
sinteticamente molte operazioni ricorrenti nelle
interrogazioni
Algebra relazionale
Esistono diversi tipi di join
natural join
theta-join (e il suo sottocaso equi-join)
semi-join

DB
MG DB
MG
47

Elena Baralis
©2007 Politecnico di Torino 8
Basi di dati Algebra relazionale

Natural join: definizione Natural join: proprietà

R=A B R=A B
Il natural join di due relazioni A e B genera una Il natural join è commutativo e associativo
relazione R
avente come schema
gli attributi presenti nello schema di A e non
presenti nello schema di B
gli attributi presenti nello schema di B e non
presenti nello schema di A
una sola copia degli attributi comuni (con lo stesso
nome nello schema di A e di B)
contenente tutte le coppie costituite da una tupla
di A e una tupla di B per cui il valore degli attributi
DB
MG comuni è uguale 49 DB
MG
50

Natural join: esempio Natural join: esempio

Trovare le informazioni sui corsi e sui docenti Trovare le informazioni sui corsi e sui docenti
che li tengono R che li tengono R

R = Corsi Docenti
Corsi Docenti Corsi Docenti
R Corsi. Corsi. Corsi. Docenti. Docenti.
Codice NomeCorso Semestre MatrDocente NomeDoc Diparimento
M2170 Informatica 1 1 D102 Verdi Informatica
M4880 Sistemi digitali 2 D104 Bianchi Elettronica
F1401 Elettronica 1 D104 Bianchi Elettronica
F0410 Basi di dati 2 D102 Verdi Informatica

DB
MG
51 DB
MG
52

Natural join: esempio Natural join: esempio

Trovare le informazioni sui corsi e sui docenti Trovare le informazioni sui corsi e sui docenti
che li tengono R che li tengono R

R = Corsi Docenti R = Corsi Docenti


Corsi Docenti Corsi Docenti
R Corsi. Corsi. Corsi. Docenti. Docenti. R Corsi. Corsi. Corsi. Docenti. Docenti.
Codice NomeCorso Semestre MatrDocente NomeDoc Diparimento Codice NomeCorso Semestre MatrDocente NomeDoc Diparimento
M2170 Informatica 1 1 D102 Verdi Informatica M2170 Informatica 1 1 D102 Verdi Informatica
M4880 Sistemi digitali 2 D104 Bianchi Elettronica M4880 Sistemi digitali 2 D104 Bianchi Elettronica
F1401 Elettronica 1 D104 Bianchi Elettronica F1401 Elettronica 1 D104 Bianchi Elettronica
F0410 Basi di dati 2 D102 Verdi Informatica F0410 Basi di dati 2 D102 Verdi Informatica

DB
MG
53 DB
MG
54

Elena Baralis
©2007 Politecnico di Torino 9
Basi di dati Algebra relazionale

Natural join: esempio Theta-join

R Corsi. Corsi. Corsi. Docenti. Docenti. Il theta-join di due relazioni A e B genera tutte le
Codice NomeCorso Semestre MatrDocente NomeDoc Diparimento
coppie formate da una tupla di A e una tupla di B
M2170 Informatica 1 1 D102 Verdi Informatica
M4880 Sistemi digitali 2 D104 Bianchi Elettronica
che soddisfano una generica “condizione di
F1401 Elettronica 1 D104 Bianchi Elettronica legame”
F0410 Basi di dati 2 D102 Verdi Informatica

Nota bene: l’attributo comune MatrDocente è


presente una volta sola nello schema della
relazione risultante R

DB
MG
55 DB
MG
56

Theta-join: esempio Theta-join: esempio

Trovare la matricola dei docenti che sono titolari Corsi C1 Codice NomeCorso Semestre MatrDocente
di almeno due corsi M2170 Informatica 1 1 D102
M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
F0410 Basi di dati 2 D102

Corsi C2 Codice NomeCorso Semestre MatrDocente


M2170 Informatica 1 1 D102
M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
F0410 Basi di dati 2 D102
DB
MG
57 DB
MG
58

Theta-join: esempio Theta-join: esempio

Trovare la matricola dei R Corsi C1.


Codice
Corsi C1.
NomeCorso
Corsi C1.
Semestre
Corsi C1.
MatrDocente
Corsi C2.
Codice
Corsi C2.
NomeCorso
Corsi C2.
Semestre
Corsi C2.
MatrDocente

docenti che sono titolari di pC1.MatrDocente M2170 Informatica 1 1 D102 M2170 Informatica 1 1 D102

almeno due corsi


M2170 Informatica 1 1 D102 M4880 Sistemi digitali 2 D104

p M2170 Informatica 1 1 D102 F1401 Elettronica 1 D104


M2170 Informatica 1 1 D102 F0410 Basi di dati 2 D102
M4880 Sistemi digitali 2 D104 M2170 Informatica 1 1 D102
Corsi C1 Corsi C2 M4880 Sistemi digitali 2 D104 M4880 Sistemi digitali 2 D104
M4880 Sistemi digitali 2 D104 F1401 Elettronica 1 D104
M4880 Sistemi digitali 2 D104 F0410 Basi di dati 2 D102
p: C1.MatrDocente=C2.MatrDocente  C1.Codice<>C2.Codice
F1401 Elettronica 1 D104 M2170 Informatica 1 1 D102
F1401 Elettronica 1 D104 M4880 Sistemi digitali 2 D104
R = pC1.MatrDocente((Corsi C1) p (Corsi C2)) F1401 Elettronica 1 D104 F1401 Elettronica 1 D104
F1401 Elettronica 1 D104 F0410 Basi di dati 2 D102
F0410 Basi di dati 2 D102 M2170 Informatica 1 1 D102
F0410 Basi di dati 2 D102 M4880 Sistemi digitali 2 D104
F0410 Basi di dati 2 D102 F1401 Elettronica 1 D104
DB
MG
59 DB
MGF0410 Basi di dati 2 D102 F0410 Basi di dati 2 D102

Elena Baralis
©2007 Politecnico di Torino 10
Basi di dati Algebra relazionale

Theta-join: esempio Theta-join: definizione

Corsi C1. Corsi C1. Corsi C1. Corsi C1. Corsi C2. Corsi C2. Corsi C2. Corsi C2.
R=A pB
Codice NomeCorso Semestre MatrDocente Codice NomeCorso Semestre MatrDocente
Il theta-join di due relazioni A e B genera una
M2170 Informatica 1 1 D102 F0410 Basi di dati 2 D102
M4880 Sistemi digitali 2 D104 F1401 Elettronica 1 D104
relazione R
F1401 Elettronica 1 D104 M4880 Sistemi digitali 2 D104 avente come schema l’unione degli schemi di A e
F0410 Basi di dati 2 D102 M2170 Informatica 1 1 D102 di B
contenente tutte le coppie costituite da una tupla
di A e una tupla di B per cui è vero il predicato p
Il predicato p è nella forma X q Y
R Corsi C1.
X è un attributo di A, Y è un attributo di B
MatrDocente
D102 q è un operatore di confronto compatibile con i
D104 domini di X e di Y
Il theta-join è commutativo e associativo
DB
MG
61 DB
MG
62

Equi-join: definizione Semi-join

R=A pB Il semi-join di due relazioni A e B seleziona tutte


Equi-join le tuple di A “semanticamente legate” ad almeno
caso particolare del theta-join in cui q è una tupla di B
l’operatore di uguaglianza (=) le informazioni di B non compaiono nel risultato

DB
MG
63 DB
MG
64

Semi-join: esempio Semi-join: esempio

Trovare le informazioni relative ai docenti titolari Docenti MatrDocente NomeDoc Dipartimento


di almeno un corso D102 Verdi Informatica
D105 Neri Informatica
D104 Bianchi Elettronica

Corsi Codice NomeCorso Semestre MatrDocente


M2170 Informatica 1 1 D102
M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
F0410 Basi di dati 2 D102

DB
MG
65 DB
MG
66

Elena Baralis
©2007 Politecnico di Torino 11
Basi di dati Algebra relazionale

Semi-join: esempio Semi-join: esempio

Docenti. Docenti. Docenti. Corsi. Corsi. Corsi. Corsi. Docenti. Docenti. Docenti. Corsi. Corsi. Corsi. Corsi.
MatrDocente NomeDoc Dipartimento Codice NomeCorso Semestre MatrDocente MatrDocente NomeDoc Dipartimento Codice NomeCorso Semestre MatrDocente
D102 Verdi Informatica M2170 Informatica 1 1 D102 D102 Verdi Informatica M2170 Informatica 1 1 D102
D102 Verdi Informatica M4880 Sistemi digitali 2 D104 D102 Verdi Informatica F0410 Basi di dati 2 D102
D102 Verdi Informatica F1401 Elettronica 1 D104 D104 Bianchi Elettronica M4880 Sistemi digitali 2 D104
D102 Verdi Informatica F0410 Basi di dati 2 D102 D104 Bianchi Elettronica F1401 Elettronica 3 D104
D105 Neri Informatica M2170 Informatica 1 1 D102
D105 Neri Informatica M4880 Sistemi digitali 2 D104
D105 Neri Informatica F1401 Elettronica 1 D104
D105 Neri Informatica F0410 Basi di dati 2 D102 R Docenti. Docenti. Docenti.
D104 Bianchi Elettronica M2170 Informatica 1 1 D102 MatrDocente NomeDoc Dipartimento

D104 Bianchi Elettronica M4880 Sistemi digitali 2 D104 D102 Verdi Informatica
D104 Bianchi Elettronica F1401 Elettronica 1 D104 D104 Bianchi Elettronica
D104 Bianchi Elettronica F0410 Basi di dati 2 D102

DB
MG
67 DB
MG
68

Semi-join: definizione Semi-join: proprietà

R=A pB Il semi-join può essere espresso in funzione del


Il semi-join di due relazioni A e B genera una theta-join
relazione R A pB = pschema(A)(A pB)

avente lo stesso schema di A Il semi-join non gode della proprietà commutativa


contenente tutte le tuple di A per cui è vero il
predicato specificato da p
Il predicato p è espresso nella stessa forma del
theta-join (confronto tra attributi di A e di B)

DB
MG
69 DB
MG
70

Semi-join: esempio

Trovare le informazioni
relative ai docenti titolari di R
almeno un corso p

R=Docenti p Corsi Docenti Corsi

p: Docenti.MatrDocente=Corsi.MatrDocente Algebra relazionale

R Docenti. Docenti. Docenti.


MatrDocente NomeDoc Dipartimento
D102 Verdi Informatica
D104 Bianchi Elettronica

DB
MG DB
MG
71

Elena Baralis
©2007 Politecnico di Torino 12
Basi di dati Algebra relazionale

Outer-join Left outer-join

Variante del join che permette di conservare Il left outer-join di due relazioni A e B genera le
l’informazione relativa alle tuple non coppie formate da
semanticamente legate dal predicato di join una tupla di A e una di B “semanticamente legate”
completa con valori nulli le tuple prive di
controparte +
Esistono tre tipi di outer-join una tupla di A “non semanticamente legata” a
left: sono completate solo le tuple del primo tuple di B completata con valori nulli per tutti gli
operando attributi di B
right: sono completate solo le tuple del secondo
operando
full: sono completate le tuple di entrambi gli
operandi

DB
MG
73 DB
MG
74

Left outer-join: esempio Left outer-join: esempio

Trovare le informazioni sui docenti e sui corsi che Docenti MatrDocente NomeDoc Dipartimento
tengono D102 Verdi Informatica
D105 Neri Informatica
D104 Bianchi Elettronica

Corsi Codice NomeCorso Semestre MatrDocente


M2170 Informatica 1 1 D102
M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
F0410 Basi di dati 2 D102
DB
MG
75 DB
MG
76

Left outer-join: esempio Left outer-join: esempio


R R
Docenti. Docenti. Docenti. Corsi. Corsi. Corsi. Corsi. Docenti. Docenti. Docenti. Corsi. Corsi. Corsi. Corsi.
MatrDocente NomeDoc Dipartimento Codice NomeCorso Semestre MatrDocente MatrDocente NomeDoc Dipartimento Codice NomeCorso Semestre MatrDocente
D102 Verdi Informatica M2170 Informatica 1 1 D102 D102 Verdi Informatica M2170 Informatica 1 1 D102
D102 Verdi Informatica F0410 Basi di dati 2 D102 D102 Verdi Informatica F0410 Basi di dati 2 D102
D104 Bianchi Elettronica M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica M4880 Sistemi digitali 2 D104
D104 Bianchi Elettronica F1401 Elettronica 1 D104 D104 Bianchi Elettronica F1401 Elettronica 1 D104
D105 Neri Informatica null null null null

DB
MG
77 DB
MG
78

Elena Baralis
©2007 Politecnico di Torino 13
Basi di dati Algebra relazionale

Left outer-join: definizione Left outer-join: esempio

R=A pB Trovare le informazioni sui docenti e sui corsi


Il left outer-join di due relazioni A e B genera una che tengono
relazione R R
avente come schema l’unione degli schemi di A e R = Docenti pCorsi
p
di B
contenente le coppie formate da Docenti Corsi
una tupla di A e una tupla di B per cui è vero il p: Docenti.MatrDocente=Corsi.MatrDocente
R
predicato p
Docenti. Docenti. Docenti. Corsi. Corsi. Corsi. Corsi.
una tupla di A che non è correlata mediante il MatrDocente NomeDoc Dipartimento Codice NomeCorso Semestre MatrDocente
predicato p a tuple di B completata con valori D102 Verdi Informatica M2170 Informatica 1 1 D102

nulli per tutti gli attributi di B D102 Verdi Informatica F0410 Basi di dati 2 D102
D104 Bianchi Elettronica M4880 Sistemi digitali 2 D104
Il left outer-join non è commutativo
DB BG
D104 Bianchi Elettronica F1401 Elettronica 1 D104

MG DD105
79
M Neri Informatica null null null null

Right outer-join: definizione Full outer-join: definizione

R=A pB R=A pB
Il right outer-join di due relazioni A e B genera Il full outer-join di due relazioni A e B genera una
una relazione R relazione R
avente come schema l’unione degli schemi di A e avente come schema l’unione degli schemi di A e di
di B B
contenente le coppie formate da
una tupla di A e una tupla di B per cui è vero il
predicato p
una tupla di B che non è correlata mediante il
predicato p a tuple di A completata con valori
nulli per tutti gli attributi di A
Il right outer-join non è commutativo
DB
MG
81 DB
MG
82

Full outer-join: definizione Full outer-join: proprietà

R=A pB R=A pB
Il full outer-join di due relazioni A e B genera una Il full outer-join è commutativo
relazione R
contenente le coppie formate da
una tupla di A e una tupla di B per cui è vero il
predicato p
una tupla di A che non è correlata mediante il
predicato p a tuple di B completata con valori nulli
per tutti gli attributi di B
una tupla di B che non è correlata mediante il
predicato p a tuple di A completata con valori nulli
per tutti gli attributi di A
DB
MG
83 DB
MG
84

Elena Baralis
©2007 Politecnico di Torino 14
Basi di dati Algebra relazionale

Unione

L’unione di due relazioni A e B seleziona tutte le


tuple presenti in almeno una delle due relazioni

Algebra relazionale

A B A B

DB DB
MG
MG
86

Unione: relazioni d’esempio Unione: esempio


DocentiLaurea
MatrDocente NomeDoc Dipartimento
Trovare le informazioni relative ai docenti dei
D102 Verdi Informatica corsi di laurea o di master
D105 Neri Informatica
D104 Bianchi Elettronica

DocentiMaster
MatrDocente NomeDoc Dipartimento
D102 Verdi Informatica
D101 Rossi Elettrica

DB
MG
87 DB
MG
88

Unione: esempio Unione: definizione


DocentiLaurea
MatrDocente NomeDoc Dipartimento
R=AB
D102 Verdi Informatica L’unione di due relazioni A e B genera una
D105 Neri Informatica relazione R
D104 Bianchi Elettronica avente lo stesso schema di A e B
DocentiMaster contenente tutte le tuple appartenenti ad A e
MatrDocente NomeDoc Dipartimento R tutte le tuple appartenenti a B (o a entrambi)
D102 Verdi Informatica MatrDocente NomeDoc Dipartimento Compatibilità
D101 Rossi Elettrica D102 Verdi Informatica
le relazioni A e B devono avere lo stesso schema
D105 Neri Informatica
(numero e tipo degli attributi)
D104 Bianchi Elettronica
Nota bene: D101 Rossi Elettrica Le tuple duplicate sono eliminate
i duplicati sono eliminati L’unione è commutativa e associativa
DB
MG DB
MG
90

Elena Baralis
©2007 Politecnico di Torino 15
Basi di dati Algebra relazionale

Unione: esempio Intersezione

Trovare le informazioni relative ai docenti dei L’intersezione di due relazioni A e B seleziona


corsi di laurea o di master tutte le tuple presenti in entrambe le relazioni
R R = DocentiLaurea  DocentiMaster

DocentiLaurea DocentiMaster

R A B A B
MatrDocente NomeDoc Dipartimento
D102 Verdi Informatica
D105 Neri Informatica
D104 Bianchi Elettronica
D101 Rossi Elettrica
DB
MG
91 DB
MG
92

Intersezione: esempio Intersezione: esempio

DocentiLaurea
Trovare le informazioni relative ai docenti sia di MatrDocente NomeDoc Dipartimento
corsi di laurea, sia di master D102 Verdi Informatica
D105 Neri Informatica
D104 Bianchi Elettronica
DocentiMaster
MatrDocente NomeDoc Dipartimento
D102 Verdi Informatica
D101 Rossi Elettrica

DB
MG DB
MG
94

Intersezione: esempio Intersezione: definizione

DocentiLaurea
MatrDocente NomeDoc Dipartimento
R=AB
D102 Verdi Informatica L’ intersezione di due relazioni A e B genera una
D105 Neri Informatica relazione R
D104 Bianchi Elettronica avente lo stesso schema di A e B
DocentiMaster contenente tutte le tuple appartenenti sia ad A sia
MatrDocente NomeDoc Dipartimento aB
D102 Verdi Informatica Compatibilità
D101 Rossi Elettrica
le relazioni A e B devono avere lo stesso schema
(numero e tipo degli attributi)
R MatrDocente NomeDoc Dipartimento
D102 Verdi Informatica L’intersezione è commutativa e associativa

DB
MG
95 DB
MG
96

Elena Baralis
©2007 Politecnico di Torino 16
Basi di dati Algebra relazionale

Intersezione: esempio

Trovare le informazioni relative ai docenti sia di


corsi di laurea, sia di master

R R = DocentiLaurea  DocentiMaster

Algebra relazionale
DocentiLaurea DocentiMaster

R MatrDocente NomeDoc Dipartimento


D102 Verdi Informatica

DB
MG DB
MG
97

Differenza Differenza

La differenza di due relazioni A e B seleziona


tutte le tuple presenti esclusivamente in A

A B A B
A-B

A B A B
A-B
A B
B-A

A-B≠B-A
DB
MG
99 DB
MG
100

Differenza: esempio (n.1) Differenza: esempio (n.1)

DocentiLaurea
Trovare i docenti di corsi di laurea ma non di MatrDocente NomeDoc Dipartimento
master D102 Verdi Informatica
D105 Neri Informatica
D104 Bianchi Elettronica
DocentiMaster
MatrDocente NomeDoc Dipartimento
D102 Verdi Informatica
D101 Rossi Elettrica

R MatrDocente NomeDoc Dipartimento


D105 Neri Informatica
D104 Bianchi Elettronica

DB
MG
101 DB
MG
102

Elena Baralis
©2007 Politecnico di Torino 17
Basi di dati Algebra relazionale

Differenza: definizione Differenza: esempio (n.1)

R=A-B Trovare i docenti di corsi di laurea ma non di


La differenza di due relazioni A e B genera una master
relazione R R R = DocentiLaurea - DocentiMaster
avente lo stesso schema di A e di B
contenente tutte le tuple appartenenti ad A che
-
non appartengono a B
DocentiLaurea DocentiMaster
Compatibilità
le relazioni A e B devono avere lo stesso schema
R MatrDocente NomeDoc Dipartimento
(numero e tipo degli attributi) D105 Neri Informatica
La differenza non gode né della proprietà D104 Bianchi Elettronica
commutativa, né della proprietà associativa
DB
MG
103 DB
MG
104

Differenza: esempio (n. 2) Differenza: esempio (n. 2)

Trovare i docenti di corsi di master ma non di DocentiMaster


MatrDocente NomeDoc Dipartimento
laurea
D102 Verdi Informatica
R R = DocentiMaster - DocentiLaurea D101 Rossi Elettrica

- DocentiLaurea
MatrDocente NomeDoc Dipartimento
D102 Verdi Informatica
DocentiMaster DocentiLaurea
D105 Neri Informatica
D104 Bianchi Elettronica

R MatrDocente NomeDoc Dipartimento


D101 Rossi Elettrica

DB
MG
105 DB
MG
106

Differenza: esempio (n. 3) Differenza: esempio (n. 3)

Trovare Matricola, Nome e Dipartimento dei Docenti


MatrDocente NomeDoc Dipartimento
docenti che non tengono corsi
D102 Verdi Informatica
R Matricole dei docenti D105 Neri Informatica
D104 Bianchi Elettronica

- Docenti Corsi
Codice NomeCorso Semestre MatrDocente
pMatrDocente pMatrDocente M2170 Informatica 1 1 D102
Docenti Corsi M4880 Sistemi digitali 2 D104
F1401 Elettronica 1 D104
R = Docenti ((pMatrDocenteDocenti) – (pMatrDocenteCorsi)) F0410 Basi di dati 2 D102

Matricole dei docenti che tengono


DB
MG
107 DB
MG almeno un corso
108

Elena Baralis
©2007 Politecnico di Torino 18
Basi di dati Algebra relazionale

Differenza: esempio (n. 3) Differenza: esempio (n. 3)

MatrDocente MatrDocente
D102 D105
D105 Natural Join
D104 Docenti
Differenza MatrDocente MatrDocente NomeDoc Dipartimento
D105 D102 Verdi Informatica
MatrDocente D105 Neri Informatica
D102 D104 Bianchi Elettronica
D104

R MatrDocente NomeDoc Dipartimento


D105 Neri Informatica
DB
MG
109 DB
MG
110

Anti-join Anti-join: esempio

L’anti-join tra due relazioni A e B seleziona tutte Trovare Matricola, Nome e Dipartimento dei
le tuple di A “semanticamente non legate” docenti che non tengono corsi
a tuple di B
le informazioni di B non compaiono nel risultato

DB
MG
111 DB
MG
112

Anti-join: esempio Anti-join: definizione


Docenti
MatrDocente NomeDoc Dipartimento R = A pB
D102 Verdi Informatica L’anti-join di due relazioni A e B genera una
D105 Neri Informatica relazione R
D104 Bianchi Elettronica
avente lo stesso schema di A
Corsi
contenente tutte le tuple di A per cui non esiste
Codice NomeCorso Semestre MatrDocente
nessuna tupla in B per cui è vero il predicato p
M2170 Informatica 1 1 D102
M4880 Sistemi digitali 2 D104
Il predicato p è espresso nella stessa forma del
F1401 Elettronica 1 D104 theta-join e del semi-join
F0410 Basi di dati 2 D102 L’anti-join non gode né della proprietà
commutativa, né della proprietà associativa
R MatrDocente NomeDoc Dipartimento
DB
MG
D105 Neri Informatica 113 DB
MG
114

Elena Baralis
©2007 Politecnico di Torino 19
Basi di dati Algebra relazionale

Anti-join: esempio

Trovare Matricola, Nome e Dipartimento dei


docenti che non tengono corsi
R

p R = Docenti pCorsi

Docenti Corsi Algebra relazionale


p: Docenti.MatrDocente=Corsi.MatrDocente

R
MatrDocente NomeDoc Dipartimento
D105 Neri Informatica
DB
MG DB
MG
115

Divisione: esempio Divisione: esempio

Trovare gli studenti che hanno superato l’esame EsamiSuperati CorsiPrimoAnno


di tutti i corsi del primo anno MatrStudente CodCorso CodCorso
EsamiSuperati CorsiPrimoAnno S1 C1 C1
MatrStudente CodCorso CodCorso S1 C2
S1 C1 … S1 C3
S1 C2 …
S1 C4
S1 C3 …
… S1 C5
S1 C4
S1 C6
S1 C5
R
S1 C6 S2 C1
S2 C1 MatrStudente
S2 C2
S2 C2
S3 C2
S1
S3 C2
S4 C2 S4 C2 S2
S4 C4 S4 C4
DB
MG S4 C5
117 DB
MG S4 C5
118

Divisione: esempio (n. 2) Divisione: esempio (n. 2)

EsamiSuperati CorsiPrimoAnno EsamiSuperati CorsiPrimoAnno


MatrStudente CodCorso CodCorso MatrStudente CodCorso CodCorso
S1 C1 C2 S1 C1 C2
S1 C2 C4 S1 C2 C4
S1 C3 S1 C3
S1 C4 S1 C4
S1 C5 S1 C5
S1 C6 S1 C6
R
S2 C1 S2 C1
MatrStudente
S2 C2 S2 C2
S3 C2 S3 C2
S1
S4 C2 S4 C2 S4
S4 C4 S4 C4
DB
MG S4 C5
119 DB
MG S4 C5
120

Elena Baralis
©2007 Politecnico di Torino 20
Basi di dati Algebra relazionale

Divisione: esempio (n. 3) Divisione: definizione

EsamiSuperati CorsiPrimoAnno R=A/B


MatrStudente CodCorso CodCorso La divisione della relazione A per la relazione B
S1 C1 C1 genera una relazione R
S1 C2 C2
avente come schema schema(A) - schema(B)
S1 C3 C3
S1 C4 C4
contenente tutte le tuple di A tali che per ogni
S1 C5 C5
tupla (Y:y) presente in B esiste una tupla
S1 C6 C6
(X:x, Y:y) in A
R
S2 C1 La divisione non gode né della proprietà
S2 C2 MatrStudente commutativa, né della proprietà associativa
S3 C2 S1

S4 C2
S4 C4
DB
MG S4 C5
121 DB
MG
122

Divisione: esempio Altri operatori

Trovare gli studenti che hanno superato l’esame Sono stati proposti numerosi altri operatori per
di tutti i corsi del primo anno estendere il potere espressivo dell’algebra
R relazionale
estensione con un nuovo attributo, definito da
/ un’espressione scalare
PESO_LORDO=PESO_NETTO+TARA
EsamiSuperati CorsiPrimoAnno calcolo di funzioni aggregate
max, min, avg, count, sum
eventualmente con la definizione di sottoinsiemi in
R = EsamiSuperati / CorsiPrimoAnno cui raggruppare i dati (GROUP BY di SQL)

DB
MG
123 DB
MG
124

Elena Baralis
©2007 Politecnico di Torino 21
Basi di dati Linguaggio SQL: fondamenti - Introduzione

Linguaggio SQL: fondamenti

Introduzione
Istruzione SELECT: fondamenti
Interrogazioni nidificate
Operatori insiemistici
Istruzioni di aggiornamento
Basi di dati Gestione delle tabelle

DB
MG DB
MG 2

Introduzione

Introduzione al linguaggio SQL


Istruzioni del linguaggio
Notazione

Linguaggio SQL: fondamenti

DB
MG DB
MG 4

Il linguaggio SQL

Linguaggio per gestire le basi di dati relazionali


Structured Query Language
SQL possiede istruzioni per
definire lo schema di una base di dati relazionale
leggere e scrivere i dati
Introduzione definire lo schema di tabelle derivate
definire i privilegi di accesso degli utenti
gestire le transazioni

DB
MG DB
MG 6

Elena Baralis
©2007 Politecnico di Torino 1
Basi di dati Linguaggio SQL: fondamenti - Introduzione

Il linguaggio SQL Il linguaggio SQL

Il linguaggio SQL è un linguaggio a livello di set Il linguaggio è utilizzabile in modalità


gli operatori operano su relazioni interattiva
il risultato è sempre una relazione compilata
Il linguaggio SQL è dichiarativo un linguaggio ospite (host) contiene le istruzioni SQL
le istruzioni SQL si distinguono dalle istruzioni del
descrive cosa fare e non come fare
linguaggio ospite per mezzo di opportuni artifici
si pone ad un livello di astrazione superiore sintattici
rispetto ai linguaggi di programmazione tradizionali

DB
MG 7
DB
MG 8

Il linguaggio SQL

Può essere diviso in


DML (Data Manipulation Language)
linguaggio di manipolazione dei dati
DDL (Data Definition Language)
linguaggio di definizione della struttura della base di
dati
Introduzione

DB
MG DB
MG 10

Data Manipulation Language Data Definition Language

Interrogazione di una base dati per estrarre i dati Definizione dello schema di una base di dati
di interesse creazione, modifica e cancellazione di tabelle
SELECT CREATE, ALTER, DROP TABLE
Modifica dell’istanza di una base dati Definizione di tabelle derivate
inserimento di nuove informazioni in una tabella creazione, modifica e cancellazione di tabelle il cui
INSERT contenuto è ottenuto da altre tabelle della base
aggiornamento di dati presenti nella base dati dati
UPDATE CREATE, ALTER, DROP VIEW
cancellazione di dati obsoleti Definizione di strutture dati accessorie per
DELETE recuperare efficientemente i dati
creazione e cancellazione di indici
DB
MG 11
DB
MG
CREATE, DROP INDEX
12

Elena Baralis
©2007 Politecnico di Torino 2
Basi di dati Linguaggio SQL: fondamenti - Introduzione

Data Definition Language Evoluzione dello standard SQL

Definizione dei privilegi di accesso degli utenti Nome Nome


Caratteristiche
informale Ufficiale
concessione e revoca di privilegi sulle risorse
SQL-86 Costrutti base
GRANT, REVOKE SQL base
SQL-89 Integrità referenziale
Definizione di transazioni
Modello relazionale
terminazione di una transazione SQL-2 SQL-92 Vari costrutti nuovi
COMMIT, ROLLBACK 3 livelli: entry, intermediate, full
Modello relazionale a oggetti
SQL:1999 Organizzato in diverse parti
Trigger, funzioni esterne, …
SQL-3
Estensioni del modello a oggetti
SQL:2003 Eliminazione di costrutti non usati
Nuove parti: SQL/JRT, SQL/XML
DB
MG 13
DB
MG 14

Sintassi delle istruzioni SQL

Notazione
parole chiave del linguaggio
caratteri maiuscoli e colore blu scuro
termini variabili
corsivo

Introduzione

DB
MG DB
MG 16

Sintassi delle istruzioni SQL Base dati di esempio

Grammatica DB forniture prodotti


parentesi angolari < > tabella P: descrive i prodotti disponibili
isolano un termine della sintassi chiave primaria: CodP
parentesi quadre [ ] tabella F: descrive i fornitori
indicano che il termine all’interno è opzionale chiave primaria: CodF
parentesi graffe { } tabella FP: descrive le forniture, mettendo in
indicano che il termine racchiuso può non comparire relazione i prodotti con i fornitori che li forniscono
o essere ripetuto un numero arbitrario di volte chiave primaria: (CodF, CodP)
barra verticale |
indica che deve essere scelto uno tra i termini
separati dalle barre

DB
MG 17
DB
MG 18

Elena Baralis
©2007 Politecnico di Torino 3
Basi di dati Linguaggio SQL: fondamenti - Introduzione

Istanza della base dati di esempio Istanza della base dati di esempio

P F
CodP NomeP Colore Taglia Magazzino CodF NomeF NSoci Sede
P1 Maglia Rosso 40 Torino F1 Andrea 2 Torino
P2 Jeans Verde 48 Milano F2 Luca 1 Milano
P3 Camicia Blu 48 Roma F3 Antonio 3 Milano
P4 Camicia Blu 44 Torino F4 Gabriele 2 Torino
P5 Gonna Blu 40 Milano F5 Matteo 3 Venezia
P6 Bermuda Rosso 42 Torino

DB
MG 19
DB
MG 20

Istanza della base dati di esempio

FP
CodF CodP Qta
F1 P1 300
F1 P2 200
F1 P3 400
F1 P4 200
F1 P5 100
F1 P6 100
F2 P1 300
F2 P2 400
F3 P2 200
F4 P3 200
F4 P4 300
F4 P5 400

DB
MG 21

Elena Baralis
©2007 Politecnico di Torino 4
Basi di dati Istruzione SELECT: fondamenti

Istruzione SELECT: fondamenti

Struttura di base
Clausola WHERE
Ordinamento del risultato
Join
Funzioni aggregate
Linguaggio SQL: fondamenti Operatore GROUP BY

DB
MG DB
MG

Istruzione SELECT: esempio

Trovare il codice e il numero di soci dei fornitori


di Milano

Istruzione SELECT: fondamenti

DB
MG DB
MG

BD forniture prodotti Istruzione SELECT: esempio


P FP
CodP NomeP Colore Taglia Magazzino CodF CodP Qta Trovare il codice e il numero di soci dei fornitori
P1 Maglia Rosso 40 Torino F1 P1 300 di Milano
P2 Jeans Verde 48 Milano F1 P2 200
P3 Camicia Blu 48 Roma F1 P3 400
P4 Camicia Blu 44 Torino F1 P4 200
F R
P5 Gonna Blu 40 Milano F1 P5 100
P6 Bermuda Rosso 42 Torino F1 P6 100
CodF NomeF NSoci Sede pCodF, NSoci
F1 Andrea 2 Torino
F2 P1 300
F2 Luca 1 Milano sSede='Milano'
F F2 P2 400
F3 Antonio 3 Milano
CodF NomeF NSoci Sede F3 P2 200
F4 Gabriele 2 Torino
F1 Andrea 2 Torino F4 P3 200 F
F5 Matteo 3 Venezia
F2 Luca 1 Milano F4 P4 300
F3 Antonio 3 Milano F4 P5 400
F4 Gabriele 2 Torino
F5 Matteo 3 Venezia
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 1
Basi di dati Istruzione SELECT: fondamenti

Istruzione SELECT: esempio SELECT base (n.1)

Trovare il codice e il numero di soci dei fornitori Trovare il codice di tutti i prodotti
di Milano R
SELECT CodP
SELECT CodF, NSoci pCodP
FROM P;
FROM F
WHERE Sede='Milano'; P
P R
F CodP NomeP Colore Taglia Magazzino CodP
P1
CodF NomeF NSoci Sede R P1 Maglia Rosso 40 Torino
F1 Andrea 2 Torino P2 Jeans Verde 48 Milano P2
CodF NSoci
F2 Luca 1 Milano P3 Camicia Blu 48 Roma P3
F2 1
F3 Antonio 3 Milano P4 Camicia Blu 44 Torino P4
F3 3
F4 Gabriele 2 Torino P5 Gonna Blu 40 Milano P5
F5 Matteo 3 Venezia P6 Bermuda Rosso 42 Torino P6

DB
MG DB
MG

SELECT base (n.2) SELECT base (n.2)

Trovare il codice dei prodotti forniti da almeno un Trovare il codice dei prodotti forniti da almeno un
fornitore fornitore
FP R
CodF CodP Qta CodP R
F1 P1 300 P1 SELECT CodP pCodP
F1 P2 200 P2 FROM FP;
F1 P3 400 P3 FP
F1 P4 200 SELECT CodP P4
F1 P5 100 FROM FP; P5
F1 P6 100 P6
F2 P1 300 P1
F2 P2 400 P2 Non effettua la rimozione dei duplicati
F3 P2 200 P2
F4 P3 200 P3
F4 P4 300 P4
DB
MG F4 P5 400 P5 DB
MG

Eliminazione dei duplicati SELECT base (n.2)

Parola chiave DISTINCT Trovare il codice dei prodotti diversi forniti da


eliminazione dei duplicati almeno un fornitore
FP
CodF CodP Qta
Trovare il codice dei prodotti diversi forniti da F1 P1 300 SELECT DISTINCT CodP
almeno un fornitore F1 P2 200 FROM FP;
F1 P3 400
R
F1 P4 200 CodP
F1 P5 100 P1
F1 P6 100 P2
F2 P1 300 P3
F2 P2 400 P4
F3 P2 200 P5
F4 P3 200 P6
F4 P4 300
DB
MG DB
MG F4 P5 400

Elena Baralis
©2007 Politecnico di Torino 2
Basi di dati Istruzione SELECT: fondamenti

Selezione di tutte le informazioni Selezione con espressione (1/3)

Trovare tutte le informazioni sui prodotti Trovare il codice dei prodotti e la taglia espressa
con la misura americana
SELECT CodP, NomeP, Colore, Taglia, Magazzino
FROM P; SELECT CodP, Taglia-14
FROM P;
oppure P R
SELECT *
FROM P; CodP NomeP Colore Taglia Magazzino CodP
P1 Maglia Rosso 40 Torino P1 26
R
P2 Jeans Verde 48 Milano P2 34
CodP NomeP Colore Taglia Magazzino
P3 Camicia Blu 48 Roma P3 34
P1 Maglia Rosso 40 Torino
P4 Camicia Blu 44 Torino P4 30
P2 Jeans Verde 48 Milano
P5 Gonna Blu 40 Milano P5 26
P3 Camicia Blu 48 Roma
P6 Bermuda Rosso 42 Torino P6 38
P4 Camicia Blu 44 Torino
P5 Gonna Blu 40 Milano

DB
MG
P6 Bermuda Rosso 42 Torino
DB
MG

Selezione con espressione (2/3) Selezione con espressione (3/3)

Definizione di una nuova colonna temporanea Trovare il codice dei prodotti e la taglia espressa
per l’espressione calcolata con la misura americana
il nome della colonna temporanea può essere
SELECT CodP, Taglia-14 AS TagliaUSA
definito con la parola chiave AS
FROM P;

R
CodP TagliaUSA
P1 26
P2 34
P3 34
P4 30
P5 26
P6 38
DB
MG DB
MG

Struttura dell’istruzione SELECT (1)

SELECT [DISTINCT] ElencoAttributiDaVisualizzare


FROM ElencoTabelleDaUtilizzare;
Istruzione SELECT: fondamenti

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 3
Basi di dati Istruzione SELECT: fondamenti

Clausola WHERE Clausola WHERE (n.1)

Permette di esprimere condizioni di selezione Trovare il codice dei fornitori di Milano


applicate singolarmente ad ogni tupla
SELECT CodF
Espressione booleana di predicati FROM F
Predicati semplici WHERE Sede='Milano';
espressioni di confronto tra attributi e costanti
ricerca testuale F
valori NULL CodF NomeF NSoci Sede R
F1 Andrea 2 Torino CodF
F2 Luca 1 Milano F2
F3 Antonio 3 Milano F3
F4 Gabriele 2 Torino
F5 Matteo 3 Venezia

DB
MG DB
MG

Clausola WHERE (n.2) Espressioni booleane (n.1)

Trovare il codice e il numero di soci dei fornitori Trovare il codice dei fornitori di Milano con più di
che non hanno sede a Milano 2 soci
SELECT CodF, NSoci SELECT CodF
FROM F FROM F
WHERE Sede<>'Milano'; WHERE Sede='Milano' AND NSoci>2;

F R F
CodF NomeF NSoci Sede CodF NomeF NSoci Sede
F1 Andrea 2 Torino CodF NSoci F1 Andrea 2 Torino
R
F2 Luca 1 Milano F1 2 F2 Luca 1 Milano CodF
F3 Antonio 3 Milano F4 2 F3 Antonio 3 Milano F3
F4 Gabriele 2 Torino F5 3 F4 Gabriele 2 Torino
F5 Matteo 3 Venezia F5 Matteo 3 Venezia

DB
MG DB
MG

Espressioni booleane (n.2) Espressioni booleane (n.3)

Trovare il codice e il numero di soci dei fornitori di Trovare il codice e il numero di soci dei fornitori
Milano o di Torino che hanno sede a Milano e a Torino
la richiesta non può essere soddisfatta
SELECT CodF, NSoci
ogni fornitore ha una sola sede
FROM F
WHERE Sede='Milano' OR Sede='Torino';

F R F
CodF NomeF NSoci Sede CodF NSoci CodF NomeF NSoci Sede
F1 Andrea 2 Torino F1 2 F1 Andrea 2 Torino
F2 Luca 1 Milano F2 1 F2 Luca 1 Milano
F3 Antonio 3 Milano F3 3 F3 Antonio 3 Milano
F4 Gabriele 2 Torino F4 2 F4 Gabriele 2 Torino
F5 Matteo 3 Venezia F5 Matteo 3 Venezia
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 4
Basi di dati Istruzione SELECT: fondamenti

Ricerca testuale Ricerca testuale (n.1)

Operatore LIKE Trovare il codice e il nome dei prodotti il cui nome


inizia con la lettera C
NomeAttributo LIKE StringaDiCaratteri
SELECT CodP, NomeP
il carattere _ rappresenta un singolo carattere FROM P
qualsiasi (obbligatoriamente presente) WHERE NomeP LIKE 'C%';
P
il carattere % rappresenta una sequenza qualsiasi CodP NomeP Colore Taglia Magazzino
di n caratteri (anche vuota) P1 Maglia Rosso 40 Torino R
P2 Jeans Verde 48 Milano CodP NomeP
P3 Camicia Blu 48 Roma P3 Camicia
P4 Camicia Blu 44 Torino P4 Camicia
P5 Gonna Blu 40 Milano
P6 Bermuda Rosso 42 Torino

DB
MG DB
MG

Ricerca testuale (n.2) Ricerca testuale (n.3)

L’attributo Indirizzo contiene la stringa ‘Torino’ Il codice fornitore è pari a 2 e


è preceduto da un carattere ignoto
Indirizzo LIKE '%Torino%' è costituito esattamente da 2 caratteri

CodF LIKE '_2'

DB
MG DB
MG

Ricerca testuale (n.4) Gestione di valori NULL (n.1)

L’attributo magazzino non contiene una ‘e’ in Trovare il codice e il nome dei prodotti con taglia
seconda posizione maggiore di 44
SELECT CodP, NomeP
Magazzino NOT LIKE '_e%'
FROM P
WHERE Taglia>44;

P
CodP NomeP Colore Taglia Magazzino R
P1 Maglia Rosso 40 Torino CodP NomeP
P2 Jeans Verde 48 Milano P2 Jeans
P3 Camicia Blu 48 Roma P3 Camicia
P4 Camicia Blu 44 Torino
P5 Gonna Blu NULL Milano
P6 Bermuda Rosso 42 Torino
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 5
Basi di dati Istruzione SELECT: fondamenti

Valore NULL Ricerca di valori NULL

Le tuple per cui la taglia è NULL non sono Operatore speciale IS


selezionate
NomeAttributo IS [NOT] NULL
il predicato Taglia>44 è falso
In presenza di valori NULL qualsiasi predicato di
confronto è falso

DB
MG DB
MG

Ricerca di valori NULL (n.1) Ricerca di valori NULL (n.2)

Trovare il codice e il nome dei prodotti per cui la Trovare il codice e il nome dei prodotti con la
taglia non è indicata taglia maggiore di 44 o che potrebbero avere
SELECT CodP, NomeP
taglia maggiore di 44
SELECT CodP, NomeP
FROM P
WHERE Taglia IS NULL; FROM P
WHERE Taglia>44 OR Taglia IS NULL;
P P
CodP NomeP Colore Taglia Magazzino CodP NomeP Colore Taglia Magazzino R
P1 Maglia Rosso 40 Torino P1 Maglia Rosso 40 Torino
R CodP NomeP
P2 Jeans Verde 48 Milano P2 Jeans Verde 48 Milano P2 Jeans
CodP NomeP
P3 Camicia Blu 48 Roma P3 Camicia Blu 48 Roma P3 Camicia
P5 Gonna
P4 Camicia Blu 44 Torino P4 Camicia Blu 44 Torino P5 Gonna
P5 Gonna Blu NULL Milano P5 Gonna Blu NULL Milano
P6 Bermuda Rosso 42 Torino P6 Bermuda Rosso 42 Torino
DB
MG DB
MG

Struttura dell’istruzione SELECT (2)

SELECT [DISTINCT] ElencoAttributiDaVisualizzare


FROM ElencoTabelleDaUtilizzare
[WHERE CondizioniDiTupla ]; Istruzione SELECT: fondamenti

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 6
Basi di dati Istruzione SELECT: fondamenti

Ordinamento del risultato (n.1) Ordinamento

Trovare il codice dei prodotti e la loro taglia Clausola ORDER BY


ordinando il risultato in ordine decrescente di ORDER BY NomeAttributo [ASC | DESC]
taglia {, NomeAttributo [ASC | DESC]}
SELECT CodP, Taglia
l’ordinamento implicito è crescente
FROM P
ORDER BY Taglia DESC; senza DESC
P R gli attributi di ordinamento devono comparire nella
CodP NomeP Colore Taglia Magazzino CodP Taglia clausola SELECT
P1 Maglia Rosso 40 Torino P2 48 anche implicitamente (come SELECT *)
P2 Jeans Verde 48 Milano P3 48
P3 Camicia Blu 48 Roma P4 44
P4 Camicia Blu 44 Torino P6 42
P5 Gonna Blu 40 Milano P1 40
P6 Bermuda Rosso 42 Torino P5 40
DB
MG DB
MG

Ordinamento del risultato (n.2) Ordinamento del risultato (n.2)

Trovare tutte le informazioni sui prodotti Trovare tutte le informazioni sui prodotti
ordinando il risultato in ordine crescente di ordinando il risultato in ordine crescente di
nome e decrescente di taglia nome e decrescente di taglia
SELECT CodP, NomeP, Colore, Taglia, Magazzino SELECT CodP, NomeP, Colore, Taglia, Magazzino
FROM P FROM P
ORDER BY NomeP, Taglia DESC; ORDER BY NomeP, Taglia DESC;
P R
CodP NomeP Colore Taglia Magazzino CodP NomeP Colore Taglia Magazzino
P1 Maglia Rosso 40 Torino P6 Bermuda Rosso 42 Torino
P2 Jeans Verde 48 Milano P3 Camicia Blu 48 Roma
P3 Camicia Blu 48 Roma P4 Camicia Blu 44 Torino
P4 Camicia Blu 44 Torino P5 Gonna Blu 40 Milano
P5 Gonna Blu 40 Milano P2 Jeans Verde 48 Milano
P6 Bermuda Rosso 42 Torino P1 Maglia Rosso 40 Torino
DB
MG DB
MG

Ordinamento del risultato (n.2) Ordinamento del risultato (n.3)

Trovare tutte le informazioni sui prodotti Trovare il codice dei prodotti e la taglia espressa
ordinando il risultato in ordine crescente di come taglia americana, ordinando il risultato in
nome e decrescente di taglia ordine crescente di taglia
SELECT * SELECT CodP, Taglia-14 AS TagliaUSA
FROM P FROM P
ORDER BY NomeP, Taglia DESC; ORDER BY TagliaUSA;
P R
R CodP NomeP Colore Taglia Magazzino CodP TagliaUSA
CodP NomeP Colore Taglia Magazzino P1 Maglia Rosso 40 Torino P5 26
P6 Bermuda Rosso 42 Torino P2 Jeans Verde 48 Milano P1 28
P3 Camicia Blu 48 Roma P6 28
P3 Camicia Blu 48 Roma
P4 Camicia Blu 44 Torino P4 30
P4 Camicia Blu 44 Torino
P5 Gonna Blu 40 Milano P2 34
P2 Jeans Verde 48 Milano P5 Gonna Blu 40 Milano
P6 Bermuda Rosso 42 Torino P3 34
P1 Maglia Rosso 40 Torino
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 7
Basi di dati Istruzione SELECT: fondamenti

Struttura dell’istruzione SELECT (3)

SELECT [DISTINCT] ElencoAttributiDaVisualizzare


FROM ElencoTabelleDaUtilizzare
[WHERE CondizioniDiTupla ]
Istruzione SELECT: fondamenti
[ORDER BY ElencoAttributiDiOrdinamento ];

DB
MG DB
MG

Join (n.1) DB forniture prodotti

Trovare il nome dei fornitori che forniscono il


prodotto P2 F
CodF NomeF NSoci Sede
F1 Andrea 2 Torino
F2 Luca 1 Milano
F3 Antonio 3 Milano
F4 Gabriele 2 Torino
F5 Matteo 3 Venezia

DB
MG DB
MG

DB forniture prodotti Prodotto cartesiano


FP
CodF CodP Qta Trovare il nome dei fornitori che forniscono il
F F1 P1 300 prodotto P2
CodF NomeF NSoci Sede F1 P2 200
F1 Andrea 2 Torino F1 P3 400
F1 P4 200 SELECT NomeF
F2 Luca 1 Milano
F3 Antonio 3 Milano F1 P5 100 FROM F, FP ;
F4 Gabriele 2 Torino F1 P6 100
F5 Matteo 3 Venezia F2 P1 300
F2 P2 400
F3 P2 200
F4 P3 200
F4 P4 300
F4 P5 400

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 8
Basi di dati Istruzione SELECT: fondamenti

Prodotto cartesiano Join (n.1)

=
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
F1 Andrea 2 Torino F1 P1 300 F1 Andrea 2 Torino F1 P1 300
F1 Andrea 2 Torino F1 P2 200 F1 Andrea 2 Torino F1 P2 200
F1 Andrea 2 Torino F1 P3 400 F1 Andrea 2 Torino F1 P3 400
F1 Andrea 2 Torino F1 P4 200 F1 Andrea 2 Torino F1 P4 200
F1 Andrea 2 Torino F1 P5 100 F1 Andrea 2 Torino F1 P5 100
F1 Andrea 2 Torino F1 P6 100 F1 Andrea 2 Torino F1 P6 100
F1 Andrea 2 Torino F2 P1 300 F1 Andrea 2 Torino F2 P1 300
… … … … … … … … … … … … … …
F2 Luca 1 Milano F1 P1 300 F2 Luca 1 Milano F1 P1 300
… … … … … … … … … … … … … …
F2 Luca 1 Milano F2 P1 300 F2 Luca 1 Milano F2 P1 300
… … … … … … … … … … … … … …
DB
MG DB
MG

Join (n.1) Join (n.1)

Trovare il nome dei fornitori che forniscono il Trovare il nome dei fornitori che forniscono il
prodotto P2 prodotto P2
SELECT NomeF SELECT NomeF
FROM F, FP FROM F, FP Condizione di join
WHERE F.CodF=FP.CodF WHERE F.CodF=FP.CodF

NomeTabella.NomeAttributo

DB
MG DB
MG

Join (n.1) Join (n.1)

=
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
F1 Andrea 2 Torino F1 P1 300 F1 Andrea 2 Torino F1 P1 300
F1 Andrea 2 Torino F1 P2 200 F1 Andrea 2 Torino F1 P2 200
F1 Andrea 2 Torino F1 P3 400 F1 Andrea 2 Torino F1 P3 400
F1 Andrea 2 Torino F1 P4 200 F1 Andrea 2 Torino F1 P4 200
F1 Andrea 2 Torino F1 P5 100 F1 Andrea 2 Torino F1 P5 100
F1 Andrea 2 Torino F1 P6 100 F1 Andrea 2 Torino F1 P6 100
F1 Andrea 2 Torino F2 P1 300 F2 Luca 1 Milano F2 P1 300
… … … … … … … F2 Luca 1 Milano F2 P2 400
F2 Luca 1 Milano F1 P1 300 F3 Antonio 3 Milano F3 P2 200
… … … … … … … F4 Gabriele 2 Torino F4 P3 200
F2 Luca 1 Milano F2 P1 300 F4 Gabriele 2 Torino F4 P4 300
… … … … … … … F4 Gabriele 2 Torino F4 P5 400
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 9
Basi di dati Istruzione SELECT: fondamenti

Join (n.1) Join (n.1)


FP.CodP='P2'
Trovare il nome dei fornitori che forniscono il
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
prodotto P2
F1 Andrea 2 Torino F1 P1 300
SELECT NomeF F1 Andrea 2 Torino F1 P2 200
FROM F, FP F1 Andrea 2 Torino F1 P3 400

WHERE F.CodF=FP.CodF AND F1 Andrea 2 Torino F1 P4 200


F1 Andrea 2 Torino F1 P5 100
CodP='P2';
F1 Andrea 2 Torino F1 P6 100
F2 Luca 1 Milano F2 P1 300
F2 Luca 1 Milano F2 P2 400
F3 Antonio 3 Milano F3 P2 200
F4 Gabriele 2 Torino F4 P3 200
F4 Gabriele 2 Torino F4 P4 300
F4 Gabriele 2 Torino F4 P5 400
DB
MG DB
MG

Join (n.1) Join (n.1)

Trovare il nome dei fornitori che forniscono il


F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
prodotto P2
F1 Andrea 2 Torino F1 P2 200
F2 Luca 1 Milano F2 P2 400 R
F3 Antonio 3 Milano F3 P2 200 NomeF
Andrea
Luca
Antonio

DB
MG DB
MG

Join (n.1) Join (n.1)

Trovare il nome dei fornitori che forniscono il Trovare il nome dei fornitori che forniscono il
prodotto P2 prodotto P2
in algebra relazionale
pF.NomeF pF.NomeF SELECT NomeF SELECT NomeF
sCodP=‘P2’ FROM F, FP FROM F, FP
WHERE F.CodF=FP.CodF WHERE CodP='P2' AND
F sCodP=‘P2’ AND CodP='P2'; F.CodF=FP.CodF;

FP F FP
Il risultato e l’efficienza sono indipendenti
dall’ordine dei predicati nella clausola WHERE

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 10
Basi di dati Istruzione SELECT: fondamenti

Join (n.1) Join (n.1)

Trovare il nome dei fornitori che forniscono il Dichiaratività del linguaggio SQL
prodotto P2 in algebra relazionale si definisce l’ordine in cui
sono applicati gli operatori
in SQL l’ordine migliore è scelto dall’ottimizzatore
SELECT NomeF SELECT NomeF
indipendentemente
FROM F, FP FROM FP, F
dall’ordine delle condizioni nella clausola WHERE
WHERE FP.CodF=F.CodF WHERE FP.CodF=F.CodF
dall’ordine delle tabelle nella clausola FROM
AND CodP='P2'; AND CodP='P2';

Il risultato e l’efficienza sono indipendenti


dall’ordine delle tabelle nella clausola FROM

DB
MG DB
MG

Join (n.2) Join (n.3)

Trovare il nome dei fornitori che forniscono Trovare le coppie di codici dei fornitori tali che
almeno un prodotto rosso entrambi i fornitori abbiano sede nella stessa città
SELECT NomeF SELECT FX.CodF, FY.CodF
FROM F, FP, P FROM F AS FX, F AS FY
WHERE F.CodF=FP.CodF AND P.CodP=FP.CodP WHERE FX.Sede=FY.Sede;
AND Colore='Rosso';
F AS FX F AS FY
Clausola FROM con N tabelle CodF NomeF NSoci Sede CodF NomeF NSoci Sede
F1 Andrea 2 Torino F1 Andrea 2 Torino
almeno N-1 condizioni di join nella clausola F2 Luca 1 Milano F2 Luca 1 Milano
WHERE F3 Antonio 3 Milano F3 Antonio 3 Milano
F4 Gabriele 2 Torino F4 Gabriele 2 Torino
F5 Matteo 3 Venezia F5 Matteo 3 Venezia
DB
MG DB
MG

Join (n.3) Join (n.3)

Trovare le coppie di codici dei fornitori tali che Trovare le coppie di codici dei fornitori tali che
entrambi i fornitori abbiano sede nella stessa città entrambi i fornitori abbiano sede nella stessa città

SELECT FX.CodF, FY.CodF


R SELECT FX.CodF, FY.CodF
R
FX.CodF FY.CodF FX.CodF FY.CodF
FROM F AS FX, F AS FY FROM F AS FX, F AS FY
F1 F1 F1 F1
WHERE FX.Sede=FY.Sede; F1 F4 WHERE FX.Sede=FY.Sede AND F1 F4
F2 F2 FX.CodF <> FY.CodF; F2 F2
F2 F3 F2 F3
Sono presenti F3 F2 F3 F2
F3 F3
Elimina le coppie di valori F3 F3
coppie di valori uguali uguali
F4 F1 F4 F1
permutazioni della stessa F4 F4 F4 F4
coppia di valori F5 F5 F5 F5

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 11
Basi di dati Istruzione SELECT: fondamenti

Join (n.3) Join (n.3)

Trovare le coppie di codici dei fornitori tali che Trovare le coppie di codici dei fornitori tali che
entrambi i fornitori abbiano sede nella stessa città entrambi i fornitori abbiano sede nella stessa città

R
SELECT FX.CodF, FY.CodF SELECT FX.CodF, FY.CodF
FX.CodF FY.CodF
FROM F AS FX, F AS FY FROM F AS FX, F AS FY
F1 F1
WHERE FX.Sede=FY.Sede AND F1 F4 WHERE FX.Sede=FY.Sede AND
FX.CodF < FY.CodF; F2 F2 FX.CodF < FY.CodF;
F2 F3
F3 F2
F3 F3 R
Elimina le permutazioni della FX.CodF FY.CodF
F4 F1
stessa coppia di valori F4 F4 F1 F4
F5 F5 F2 F3

DB
MG DB
MG

Join: sintassi alternativa Join: sintassi alternativa

Permette di specificare diversi tipi di join


outer join SELECT [DISTINCT] Attributi
Permette di distinguere FROM Tabella TipoJoin JOIN Tabella ON
condizioni di join CondizioneDiJoin
condizioni di selezione sulle tuple [WHERE CondizioniDiTupla];
Introdotta in SQL-2
recepita solo parzialmente nei prodotti commerciali TipoJoin = < INNER | [FULL | LEFT | RIGHT]
OUTER >

DB
MG DB
MG

INNER join OUTER join

Trovare il nome dei fornitori che forniscono Trovare il codice e il nome dei fornitori insieme al
almeno un prodotto rosso codice dei relativi prodotti forniti, visualizzando
anche i fornitori che non hanno forniture
SELECT NomeF
FROM P INNER JOIN FP ON P.CodP=FP.CodP SELECT F.CodF, NomeF, CodP
INNER JOIN F ON F.CodF=FP.CodF FROM F LEFT OUTER JOIN FP ON
WHERE P.Colore='Rosso'; F.CodF=FP.CodF;

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 12
Basi di dati Istruzione SELECT: fondamenti

OUTER join
R
F.CodF F.NomeF FP.CodP
F1 Andrea P1
F1 Andrea P2
F1 Andrea P3
F1 Andrea P4
F1 Andrea P5
F1 Andrea P6
F2 Luca P1 Istruzione SELECT: fondamenti
F2 Luca P2
F3 Antonio P2
F4 Gabriele P3
F4 Gabriele P4
F4 Gabriele P5

DB
MG
F5 Matteo NULL
DB
MG

Funzioni aggregate Funzioni aggregate

Una funzione aggregata Funzioni aggregate disponibili in SQL-2


opera su un insieme di valori COUNT: conteggio degli elementi in un attributo
produce come risultato un unico valore SUM: somma dei valori di un attributo
(aggregato) AVG: media dei valori di un attributo
MAX: massimo valore di un attributo
MIN: minimo valore di un attributo

DB
MG DB
MG

Funzioni aggregate Struttura dell’istruzione SELECT (4)

Una funzione aggregata


opera su un insieme di valori
produce come risultato un unico valore
(aggregato) SELECT ElencoFunzioniAggregateDaVisualizzare
è indicata nella clausola SELECT FROM ElencoTabelleDaUtilizzare
[WHERE Condizioni DiTupla ]
[ORDER BY ElencoAttributiDiOrdinamento ];

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 13
Basi di dati Istruzione SELECT: fondamenti

Funzioni aggregate Funzione COUNT

Una funzione aggregata Conteggio del numero di elementi di un insieme


opera su un insieme di valori righe di una tabella
produce come risultato un unico valore (aggregato) valori (eventualmente distinti) di uno o più attributi
è indicata nella clausola SELECT
non si possono indicare anche attributi non aggregati
COUNT (<*| [DISTINCT | ALL] ListaAttributi >)
possono essere richieste più funzioni aggregate
contemporaneamente

DB
MG DB
MG

Funzione COUNT (n.1) Funzione COUNT (n.2)

Trovare il numero di fornitori Trovare il numero di fornitori che hanno almeno


una fornitura
SELECT COUNT(*)
FROM F; FP
CodF CodP Qta SELECT COUNT(*)
F1 P1 300 FROM FP;
F1 P2 200
F F1 P3 400 R
CodF NomeF NSoci Sede R F1 P4 200
F1 Andrea 2 Torino
F1 P5 100
F2 Luca 1 Milano 12
5 F1 P6 100
F3 Antonio 3 Milano
F2 P1 300
F4 Gabriele 2 Torino
F2 P2 400
F5 Matteo 3 Venezia
F3 P2 200 Conta il numero di forniture, non
F4 P3 200
F4 P4 300
di fornitori
DB
MG DB
MG F4 P5 400

Funzione COUNT (n.2) Funzione COUNT (n.2)

Trovare il numero di fornitori che hanno almeno Trovare il numero di fornitori che hanno almeno
una fornitura una fornitura
FP FP
CodF CodP Qta SELECT COUNT(CodF) CodF CodP Qta SELECT COUNT(DISTINCT CodF)
F1 P1 300 FROM FP; F1 P1 300 FROM FP;
F1 P2 200 F1 P2 200
F1 P3 400 F1 P3 400
R R
F1 P4 200 F1 P4 200
F1 P5 100 F1 P5 100
F1 P6 100 12 F1 P6 100 4
F2 P1 300 F2 P1 300
F2 P2 400 F2 P2 400
F3 P2 200 Conta il numero di forniture, non F3 P2 200 Conta il numero di fornitori
F4 P3 200 F4 P3 200
F4 P4 300
di fornitori F4 P4 300
diversi
DB
MG F4 P5 400 DB
MG F4 P5 400

Elena Baralis
©2007 Politecnico di Torino 14
Basi di dati Istruzione SELECT: fondamenti

Funzione COUNT Funzioni aggregate e WHERE

Conteggio del numero di elementi di un insieme Trovare il numero di fornitori che forniscono il
righe di una tabella prodotto P2
valori (eventualmente distinti) di uno o più attributi FP SELECT COUNT(*)
CodF CodP Qta FROM FP
F1 P1 300
COUNT (<*| [DISTINCT | ALL] ListaAttributi >) F1 P2 200
WHERE CodP='P2';
F1 P3 400
F1 P4 200
F1 P5 100
CodF CodP Qta R
Se l’argomento della funzione è preceduto da F1 P6 100
F1 P2 200
F2 P1 300
DISTINCT, conta il numero di valori distinti F2 P2 400
F2 P2 400 3
dell’argomento F3 P2 200
F3 P2 200

F4 P3 200
F4 P4 300
DB
MG DB
MGF4 P5 400

Funzioni aggregate e WHERE Funzioni SUM, MAX, MIN, AVG

Le funzioni aggregate sono valutate solo dopo SUM, MAX, MIN e AVG
l’applicazione di tutti i predicati nella clausola ammettono come argomento un attributo o
WHERE un’espressione
SUM e AVG
ammettono solo attributi di tipo numerico o
intervallo di tempo
MAX e MIN
richiedono che l’espressione sia ordinabile
possono essere applicate anche su stringhe di
caratteri e istanti di tempo

DB
MG DB
MG

Funzione SUM

Trovare la quantità totale di pezzi forniti per il


prodotto P2
FP
SELECT SUM(Qta)
CodF CodP Qta
F1 P1 300 FROM FP
F1 P2 200 WHERE CodP='P2';
F1 P3 400
F1 P4 200
Istruzione SELECT: fondamenti
F1 P5 100
CodF CodP Qta R
F1 P6 100
F1 P2 200
F2 P1 300
F2 P2 400 800
F2 P2 400
F3 P2 200
F3 P2 200
F4 P3 200
F4 P4 300
DB
MG F4 P5 400 DB
MG

Elena Baralis
©2007 Politecnico di Torino 15
Basi di dati Istruzione SELECT: fondamenti

Raggruppamento Raggruppamento

Per ogni prodotto, trovare la quantità totale di Per ogni prodotto, trovare la quantità totale di
pezzi forniti pezzi forniti
FP FP
CodF CodP Qta CodF CodP Qta SELECT CodP, SUM(Qta)
F1 P1 300 F1 P1 300
R FROM FP
F1 P2 200 F2 P1 300
CodP GROUP BY CodP;
F1 P3 400 F1 P2 200
P1 600
F1 P4 200 F2 P2 400
F1 P5 100 F3 P2 200 P2 800
F1 P6 100 F1 P3 400 P3 600
F2 P1 300 F4 P3 200 P4 500
F2 P2 400 F1 P4 200 P5 500
F3 P2 200 F4 P4 300 P6 100
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
DB
MG
F4 P5 400 F1 P6 100 DB
MG

GROUP BY GROUP BY e WHERE

Clausola di raggruppamento Per ogni prodotto, trovare la quantità totale di


pezzi forniti da fornitori con sede a Milano
GROUP BY ElencoAttributiDiRaggruppamento
FP
l’ordine degli attributi di raggruppamento è CodF CodP Qta
ininfluente F F1 P1 300
CodF NomeF NSoci Sede F1 P2 200
Nella clausola SELECT possono comparire solo F1 Andrea 2 Torino F1 P3 400
attributi presenti nella clausola GROUP BY F2 Luca 1 Milano F1 P4 200
F3 Antonio 3 Milano F1 P5 100
funzioni aggregate F4 Gabriele 2 Torino F1 P6 100
F5 Matteo 3 Venezia F2 P1 300
F2 P2 400
F3 P2 200
F4 P3 200
F4 P4 300
DB
MG DB
MG F4 P5 400

GROUP BY e WHERE GROUP BY e WHERE

Per ogni prodotto, trovare la quantità totale di Per ogni prodotto, trovare la quantità totale di
pezzi forniti da fornitori con sede a Milano pezzi forniti da fornitori con sede a Milano
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
SELECT ... F1 Andrea 2 Torino F1 P1 300
F1 Andrea 2 Torino F1 P2 200
FROM FP, F
F1 Andrea 2 Torino F1 P3 400
WHERE FP.CodF=F.CodF AND Sede='Milano' F1 Andrea 2 Torino F1 P4 200
... F1 Andrea 2 Torino F1 P5 100
F1 Andrea 2 Torino F1 P6 100
F2 Luca 1 Milano F2 P1 300
F2 Luca 1 Milano F2 P2 400
F3 Antonio 3 Milano F3 P2 200
F4 Gabriele 2 Torino F4 P3 200
F4 Gabriele 2 Torino F4 P4 300
DB
MG DB
MG F4 Gabriele 2 Torino F4 P5 400

Elena Baralis
©2007 Politecnico di Torino 16
Basi di dati Istruzione SELECT: fondamenti

GROUP BY e WHERE GROUP BY e WHERE

Per ogni prodotto, trovare la quantità totale di Per ogni prodotto, trovare la quantità totale di
pezzi forniti da fornitori con sede a Milano pezzi forniti da fornitori con sede a Milano

SELECT CodP, SUM(Qta)


FP.CodP FP.Qta R
FROM FP, F FP.CodP
P1 300
WHERE FP.CodF=F.CodF AND Sede='Milano' P1 300
P2 400
GROUP BY CodP; P2 600
P2 200

I prodotti senza forniture non sono inclusi nel


risultato

DB
MG DB
MG

GROUP BY e SELECT Struttura dell’istruzione SELECT (5)

Per ogni prodotto, trovare il codice, il nome e la


quantità totale fornita
SELECT P.CodP, NomeP, SUM(Qta)
FROM P, FP SELECT [DISTINCT] ElencoAttributiDaVisualizzare
WHERE P.CodP=FP.CodP FROM ElencoTabelleDaUtilizzare
GROUP BY P.CodP, NomeP [WHERE CondizioniDiTupla ]
[GROUP BY ElencoAttributiDiRaggruppamento ]
Artificio sintattico [ORDER BY ElencoAttributiDiOrdinamento ];
gli attributi univocamente determinati da attributi
già presenti nella clausola GROUP BY possono
essere aggiunti senza alterare il risultato
DB
MG DB
MG

Condizione di selezione sui gruppi Condizione di selezione sui gruppi (n.1)

Trovare la quantità totale di pezzi forniti per i Trovare la quantità totale di pezzi forniti per i
prodotti per cui sono forniti in totale almeno 600 prodotti per cui sono forniti in totale almeno 600
pezzi FP pezzi FP
la condizione è definita su valori aggregati CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
Non è possibile utilizzare la clausola WHERE F1 P3 400 F1 P2 200
R
F1 P4 200 F2 P2 400
CodP
F1 P5 100 F3 P2 200
P1 600
F1 P6 100 F1 P3 400
F4 P3 200 P2 800
F2 P1 300
F2 P2 400 F1 P4 200 P3 600
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
DB
MG DB
MG
F4 P5 400 F1 P6 100

Elena Baralis
©2007 Politecnico di Torino 17
Basi di dati Istruzione SELECT: fondamenti

Condizione di selezione sui gruppi (n.1) Condizione di selezione sui gruppi (n.2)

Trovare la quantità totale di pezzi forniti per i Trovare il codice dei prodotti rossi forniti da più di
prodotti per cui sono forniti in totale almeno 600 un fornitore
pezzi FP
CodF CodP Qta
SELECT CodP, SUM(Qta) P F1 P1 300
FROM FP CodP NomeP Colore Taglia Magazzino F1 P2 200
P1 Maglia Rosso 40 Torino
GROUP BY CodP F1 P3 400
P2 Jeans Verde 48 Milano F1 P4 200
HAVING SUM(Qta)>=600; P3 Camicia Blu 48 Roma F1 P5 100
P4 Camicia Blu 44 Torino F1 P6 100
P5 Gonna Blu 40 Milano F2 P1 300
La clausola HAVING permette di specificare P6 Bermuda Rosso 42 Torino F2 P2 400
condizioni su funzioni aggregate F3 P2 200
F4 P3 200
F4 P4 300

DB
MG DB
MG
F4 P5 400

Condizione di selezione sui gruppi (n.2) Condizione di selezione sui gruppi (n.2)

Trovare il codice dei prodotti rossi forniti da più di Trovare il codice dei prodotti rossi forniti da più di
un fornitore un fornitore
F.CodF F.CodP F.Qta P.CodP P.NomeP P.Colore P.Taglia P.Magazzino
SELECT FP.CodP F1 P1 300 P1 Maglia Rosso 40 Torino
FROM FP, P F2 P1 300 P1 Maglia Rosso 40 Torino
WHERE FP.CodP=P.CodP AND Colore='Rosso' F1 P6 100 P6 Bermuda Rosso 42 Torino
GROUP BY FP.CodP
HAVING COUNT(*)>1;

R
CodP
P1

DB
MG DB
MG

Struttura dell’istruzione SELECT

SELECT [DISTINCT] ElencoAttributiDaVisualizzare


FROM ElencoTabelleDaUtilizzare
[WHERE CondizioniDiTupla ]
[GROUP BY ElencoAttributiDiRaggruppamento ]
[HAVING CondizioniSuAggregati ]
[ORDER BY ElencoAttributiDiOrdinamento ];

DB
MG

Elena Baralis
©2007 Politecnico di Torino 18
Basi di dati Interrogazioni nidificate

Interrogazioni nidificate

Introduzione
Operatore IN
Operatore NOT IN
Costruttore di tupla
Operatore EXISTS
Linguaggio SQL: fondamenti Operatore NOT EXISTS
Correlazione tra interrogazioni
Operazione di divisione
Table functions

DB
MG DB
MG

Introduzione

Un'interrogazione nidificata è un'istruzione


SELECT contenuta all'interno di un'altra
interrogazione
la nidificazione di interrogazioni permette di
suddividere un problema complesso in
sottoproblemi più semplici
Interrogazioni nidificate È possibile introdurre istruzioni SELECT
in un predicato nella clausola WHERE
in un predicato nella clausola HAVING
nella clausola FROM

DB
MG DB
MG

DB forniture prodotti (1/2) DB forniture prodotti (2/2)


P FP
P (CodP, NomeP, Colore, Taglia, Magazzino) CodP NomeP Colore Taglia Magazzino CodF CodP Qta
F (CodF, NomeF, NSoci, Sede) P1 Maglia Rosso 40 Torino F1 P1 300
P2 Jeans Verde 48 Milano F1 P2 200
FP (CodF, CodP, Qta) P3 Camicia Blu 48 Roma F1 P3 400
P4 Camicia Blu 44 Torino F1 P4 200
P5 Gonna Blu 40 Milano F1 P5 100
P6 Bermuda Rosso 42 Torino F1 P6 100
F2 P1 300
F F2 P2 400
CodF NomeF NSoci Sede F3 P2 200
F1 Andrea 2 Torino F4 P3 200
F2 Luca 1 Milano F4 P4 300
F3 Antonio 3 Milano F4 P5 400
F4 Gabriele 2 Torino
F5 Matteo 3 Venezia
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 1
Basi di dati Interrogazioni nidificate

Interrogazioni nidificate (n.1) Interrogazioni nidificate (n.1)

Trovare il codice dei fornitori che hanno sede Trovare il codice dei fornitori che hanno sede
nella stessa città di F1 nella stessa città di F1
SELECT CodF
FROM F
La formulazione mediante interrogazioni nidificate WHERE Sede = (SELECT Sede
consente di separare il problema in due FROM F
sottoproblemi WHERE CodF='F1');

sede del fornitore F1


codici dei fornitori con la stessa sede È possibile utilizzare '=' esclusivamente se è noto
a priori che il risultato della SELECT nidificata è
sempre un solo valore
DB
MG DB
MG

Formulazione equivalente (n.1) Formulazione equivalente

Trovare il codice dei fornitori che hanno sede La formulazione equivalente con il join è
nella stessa città di F1 caratterizzata da
Clausola FROM contenente le tabelle referenziate
È possibile definire una formulazione equivalente nelle FROM di tutte le SELECT
con il join Opportune condizioni di join nella clausola WHERE
Eventuali predicati di selezione aggiunti nella
clausola WHERE

DB
MG DB
MG

Clausola FROM (n.1) Clausola FROM (n.1)

Trovare il codice dei fornitori che hanno sede Trovare il codice dei fornitori che hanno sede
nella stessa città di F1 nella stessa città di F1
SELECT CodF
FX SELECT ...
FROM F
FROM F AS FX, F AS FY
WHERE Sede = (SELECT Sede FY
...
FROM F
WHERE CodF='F1');

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 2
Basi di dati Interrogazioni nidificate

Condizione di join (n.1) Condizione di join (n.1)

Trovare il codice dei fornitori che hanno sede Trovare il codice dei fornitori che hanno sede
nella stessa città di F1 nella stessa città di F1
SELECT CodF
SELECT ...
FROM F
FROM F AS FX, F AS FY
WHERE Sede = (SELECT Sede
WHERE FX.Sede=FY.Sede
FROM F
...
WHERE CodF='F1');

DB
MG DB
MG

Predicato di selezione (n.1) Clausola SELECT (n.1)

Trovare il codice dei fornitori che hanno sede Trovare il codice dei fornitori che hanno sede
nella stessa città di F1 nella stessa città di F1
SELECT CodF
SELECT FY.CodF
FROM F
FROM F AS FX, F AS FY
WHERE Sede = (SELECT Sede
WHERE FX.Sede=FY.Sede AND
FROM F
FX.CodF='F1';
WHERE CodF='F1');

DB
MG DB
MG

Formulazione equivalente (n.2) Formulazione equivalente (n.2)

Trovare il codice dei fornitori il cui numero di soci Trovare il codice dei fornitori il cui numero di soci
è minore del numero massimo di soci è minore del numero massimo di soci

SELECT CodF SELECT CodF


FROM F FROM F
WHERE NSoci < (SELECT MAX(NSoci) WHERE NSoci < (SELECT MAX(NSoci)
FROM F); FROM F);

È possibile definire una formulazione equivalente Non è possibile definire una formulazione
con il join? equivalente con il join

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 3
Basi di dati Interrogazioni nidificate

Operatore IN (n.1)

Trovare il nome dei fornitori che forniscono il


prodotto P2

Scomposizione del problema in due sottoproblemi


codici dei fornitori del prodotto P2
Interrogazioni nidificate nome dei fornitori aventi quei codici

DB
MG DB
MG

Operatore IN (n.1) Operatore IN (n.1)

Trovare il nome dei fornitori che forniscono il Trovare il nome dei fornitori che forniscono il
prodotto P2 prodotto P2
FP SELECT NomeF
CodF CodP Qta
F1 P1 300 FROM F
F1 P2 200 SELECT CodF Codici WHERE CodF (SELECT CodF
dei
F1 P3 400
FROM FP FROM FP
F1 P4 200 CodF fornitori
F1 WHERE CodP='P2' WHERE CodP='P2')
F1 P5 100 di P2
F1 P6 100 F2
F2 P1 300 F3
F2 P2 400
F3 P2 200
F4 P3 200
F4 P4 300
DB
MG
F4 P5 400 DB
MG

Operatore IN (n.1) Operatore IN (n.1)

Trovare il nome dei fornitori che forniscono il Trovare il nome dei fornitori che forniscono il
prodotto P2 prodotto P2
SELECT NomeF SELECT NomeF Appartenenza all'insieme
?
FROM F FROM F
WHERE CodF (SELECT CodF WHERE CodF IN (SELECT CodF
FROM FP FROM FP
WHERE CodP='P2') WHERE CodP='P2');

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 4
Basi di dati Interrogazioni nidificate

Operatore IN Formulazione equivalente

Esprime il concetto di appartenenza ad un La formulazione equivalente con il join è


insieme di valori caratterizzata da
NomeAttributo IN (InterrogazioneNidificata) clausola FROM contenente le tabelle referenziate
nelle FROM di tutte le SELECT
opportune condizioni di join nella clausola WHERE
Permette di scrivere l'interrogazione
eventuali predicati di selezione aggiunti nella
scomponendo il problema in sottoproblemi
clausola WHERE
seguendo un procedimento “bottom-up”

DB
MG DB
MG

Operatore IN (n.1) Formulazione equivalente (n.1)

Trovare il nome dei fornitori che forniscono il Trovare il nome dei fornitori che forniscono il
prodotto P2 prodotto P2
SELECT NomeF
SELECT NomeF
FROM F
FROM F, FP
WHERE CodF IN (SELECT CodF
WHERE F.CodF=FP.CodF
FROM FP
AND CodP='P2';
WHERE CodP='P2');

DB
MG DB
MG

Operatore IN (n.2) Operatore IN (n.2)

Trovare il nome dei fornitori che forniscono Trovare il nome dei fornitori che forniscono
almeno un prodotto rosso almeno un prodotto rosso
SELECT NomeF
Scomposizione del problema in sottoproblemi FROM F
codici dei prodotti rossi WHERE CodF IN (SELECT CodF
codici dei fornitori di quei prodotti FROM FP
WHERE CodP IN (SELECT CodP
nomi dei fornitori aventi quei codici
FROM P
WHERE Colore='Rosso'));

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 5
Basi di dati Interrogazioni nidificate

Formulazione equivalente (n.2) Clausola FROM (n.2)

Trovare il nome dei fornitori che forniscono Trovare il nome dei fornitori che forniscono
almeno un prodotto rosso almeno un prodotto rosso
SELECT NomeF SELECT NomeF
FROM F FROM F
WHERE CodF IN (SELECT CodF WHERE CodF IN (SELECT CodF
FROM FP FROM FP
WHERE CodP IN (SELECT CodP WHERE CodP IN (SELECT CodP
FROM P FROM P
WHERE Colore='Rosso')); WHERE Colore='Rosso'));

DB
MG DB
MG

Clausola FROM (n.2) Condizioni di join (n.2)

Trovare il nome dei fornitori che forniscono Trovare il nome dei fornitori che forniscono
almeno un prodotto rosso almeno un prodotto rosso
SELECT ... SELECT NomeF 1
FROM F, FP, P FROM F
... WHERE CodF IN (SELECT CodF
FROM FP
WHERE CodP IN (SELECT CodP
FROM P
WHERE Colore='Rosso'));

DB
MG DB
MG

Condizioni di join (n.2) Condizioni di join (n.2)

Trovare il nome dei fornitori che forniscono Trovare il nome dei fornitori che forniscono
almeno un prodotto rosso almeno un prodotto rosso
SELECT ... SELECT NomeF
FROM F, FP, P FROM F
WHERE P.CodF=F.CodF 1 WHERE CodF IN (SELECT CodF 2
FROM FP
WHERE CodP IN (SELECT CodP
FROM P
WHERE Colore='Rosso'));

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 6
Basi di dati Interrogazioni nidificate

Condizioni di join (n.2) Predicato di selezione (n.2)

Trovare il nome dei fornitori che forniscono Trovare il nome dei fornitori che forniscono
almeno un prodotto rosso almeno un prodotto rosso
SELECT ... SELECT NomeF
FROM F, FP, P FROM F
WHERE P.CodF=F.CodF AND WHERE CodF IN (SELECT CodF
FP.CodP=P.CodP 2 FROM FP
... WHERE CodP IN (SELECT CodP
FROM P
WHERE Colore='Rosso'));

DB
MG DB
MG

Clausola SELECT (n.2) Esempio complesso (n.3)

Trovare il nome dei fornitori che forniscono Trovare il nome dei fornitori che forniscono
almeno un prodotto rosso almeno un prodotto fornito da fornitori di prodotti
SELECT NomeF
rossi
FROM F, FP, P
WHERE P.CodF=F.CodF AND
FP.CodP=P.CodP AND
Colore='Rosso'

DB
MG DB
MG

Esempio complesso (n.3) Esempio complesso (n.3)

Trovare il nome dei fornitori che forniscono Trovare il nome dei fornitori che forniscono
almeno un prodotto fornito da fornitori di prodotti almeno un prodotto fornito da fornitori di prodotti
rossi rossi

La formulazione con il join è difficile


è più semplice scomporre il problema in
sottoproblemi mediante interrogazioni nidificate

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 7
Basi di dati Interrogazioni nidificate

Esempio complesso (n.3) Esempio complesso (n.3)

Trovare il nome dei fornitori che forniscono Trovare il nome dei fornitori che forniscono
almeno un prodotto fornito da fornitori di prodotti almeno un prodotto fornito da fornitori di prodotti
rossi rossi

SELECT CodF
Codici dei fornitori
FROM FP
di prodotti rossi
WHERE CodP IN
SELECT CodP (SELECT CodP
Codici dei
FROM P FROM P
prodotti rossi
DB
MG
WHERE Colore='Rosso' DB
MG
WHERE Colore='Rosso')

Esempio complesso (n.3) Esempio complesso (n.3)

Trovare il nome dei fornitori che forniscono


almeno un prodotto fornito da fornitori di prodotti
rossi SELECT CodF Codici dei fornitori
FROM FP di prodotti forniti
WHERE CodP IN
da fornitori di
prodotti rossi
SELECT CodP (SELECT CodP
FROM FP FROM FP
WHERE CodF IN WHERE CodF IN
Codici dei prodotti (SELECT CodF (SELECT CodF
forniti da fornitori FROM FP FROM FP
di prodotti rossi WHERE CodP IN WHERE CodP IN
(SELECT CodP (SELECT CodP
FROM P FROM P
DB
MG
WHERE Colore='Rosso')) DB
MG
WHERE Colore='Rosso')))

Interrogazione completa (n.3) Formulazione con il join (n.3)

SELECT NomeF
FROM F
WHERE CodF IN
(SELECT CodF
FROM FP
WHERE CodP IN
(SELECT CodP
FROM FP
WHERE CodF IN
(SELECT CodF
FROM FP
WHERE CodP IN
(SELECT CodP
FROM P
B
D G WHERE Colore='Rosso')))); DB
M MG

Elena Baralis
©2007 Politecnico di Torino 8
Basi di dati Interrogazioni nidificate

Formulazione con il join (n.3) Clausola FROM (n.3)

SELECT NomeF SELECT NomeF


FROM F FROM F
WHERE CodF IN WHERE CodF IN
(SELECT CodF (SELECT CodF
FROM FP FROM FP
WHERE CodP IN WHERE CodP IN
(SELECT CodP (SELECT CodP
FROM FP FROM FP
WHERE CodF IN WHERE CodF IN
(SELECT CodF (SELECT CodF
FROM FP FROM FP
WHERE CodP IN WHERE CodP IN
(SELECT CodP (SELECT CodP
FROM P FROM P
DB G
M
WHERE Colore='Rosso')))); DB G
M
WHERE Colore='Rosso'))));

Clausola FROM (n.3) Clausola FROM (n.3)

SELECT NomeF
FROM F
SELECT ...
WHERE CodF IN
FPA FROM F, FP AS FPA, FP AS FPB, FP AS FPC, P
(SELECT CodF
FROM FP ...
WHERE CodP IN FPB
(SELECT CodP
FROM FP
WHERE CodF IN
FPC
(SELECT CodF
FROM FP
WHERE CodP IN
(SELECT CodP
FROM P
DB G
M
WHERE Colore='Rosso')))); DB
MG

Condizioni di join (n.3) Condizioni di join (n.3)

SELECT NomeF 1
FROM F
SELECT ...
WHERE CodF IN
FPA FROM F, FP AS FPA, FP AS FPB, FP AS FPC, P
(SELECT CodF
FROM FP WHERE F.CodF=FPA.CodF 1
WHERE CodP IN ...
(SELECT CodP
FROM FP
WHERE CodF IN
(SELECT CodF
FROM FP
WHERE CodP IN
(SELECT CodP
FROM P
B
D G WHERE Colore='Rosso')))); DB
M MG

Elena Baralis
©2007 Politecnico di Torino 9
Basi di dati Interrogazioni nidificate

Condizioni di join (n.3) Condizioni di join (n.3)

SELECT NomeF
FROM F
SELECT ...
WHERE CodF IN
FPA FROM F, FP AS FPA, FP AS FPB, FP AS FPC, P
(SELECT CodF
2 WHERE F.CodF=FPA.CodF AND
FROM FP
WHERE CodP IN FPB FPA.CodP=FPB.CodP 2
(SELECT CodP ...
FROM FP
WHERE CodF IN
(SELECT CodF
FROM FP
WHERE CodP IN
(SELECT CodP
FROM P
DB G
M
WHERE Colore='Rosso')))); DB
MG

Condizioni di join (n.3) Condizioni di join (n.3)

SELECT NomeF
FROM F
SELECT ...
WHERE CodF IN
(SELECT CodF FROM F, FP AS FPA, FP AS FPB, FP AS FPC, P
FROM FP WHERE F.CodF=FPA.CodF AND
WHERE CodP IN FPB FPA.CodP=FPB.CodP AND
(SELECT CodP
3
FPB.CodF=FPC.CodF 3
FROM FP ...
WHERE CodF IN
FPC
(SELECT CodF
FROM FP
WHERE CodP IN
(SELECT CodP
FROM P
DB G
M
WHERE Colore='Rosso')))); DB
MG

Condizioni di join (n.3) Condizioni di join (n.3)

SELECT NomeF
FROM F
SELECT ...
WHERE CodF IN
(SELECT CodF FROM F, FP AS FPA, FP AS FPB, FP AS FPC, P
FROM FP WHERE F.CodF=FPA.CodF AND
WHERE CodP IN FPA.CodP=FPB.CodP AND
(SELECT CodP FPB.CodF=FPC.CodF AND
FROM FP FPC.CodP=P.CodP 4
WHERE CodF IN ...
FPC
(SELECT CodF
4
FROM FP
WHERE CodP IN
(SELECT CodP
FROM P
B
D G WHERE Colore='Rosso')))); DB
M MG

Elena Baralis
©2007 Politecnico di Torino 10
Basi di dati Interrogazioni nidificate

Predicato di selezione (n.3) Predicato di selezione (n.3)

SELECT NomeF
FROM F
SELECT ...
WHERE CodF IN
(SELECT CodF FROM F, FP AS FPA, FP AS FPB, FP AS FPC, P
FROM FP WHERE F.CodF=FPA.CodF AND
WHERE CodP IN FPA.CodP=FPB.CodP AND
(SELECT CodP FPB.CodF=FPC.CodF AND
FROM FP FPC.CodP=P.CodP AND
WHERE CodF IN Colore='Rosso'
(SELECT CodF
FROM FP
WHERE CodP IN
(SELECT CodP
FROM P
DB G
M
WHERE Colore='Rosso')))); DB
MG

Clausola SELECT (n.3)

SELECT NomeF
FROM F, FP AS FPA, FP AS FPB, FP AS FPC, P
WHERE F.CodF=FPA.CodF AND
FPA.CodP=FPB.CodP AND
FPB.CodF=FPC.CodF AND
FPC.CodP=P.CodP AND Interrogazioni nidificate
Colore='Rosso';

DB
MG DB
MG

Concetto di esclusione (n.1) Soluzione errata (n.1)

Trovare il nome dei fornitori che non forniscono il Trovare il nome dei fornitori che non forniscono il
prodotto P2 prodotto P2
è possibile esprimere l'interrogazione mediante il non è possibile esprimere l'interrogazione
join? mediante il join

SELECT NomeF SELECT NomeF


FROM F, FP FROM F, FP
WHERE F.CodF=FP.CodF WHERE F.CodF=FP.CodF
AND CodP<>'P2'; AND CodP<>'P2';

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 11
Basi di dati Interrogazioni nidificate

Soluzione errata (n.1) Soluzione errata (n.1)

Trovare il nome dei fornitori che non forniscono il SELECT NomeF


prodotto P2 FP FROM F, FP
F CodF CodP Qta WHERE F.CodF=FP.CodF
F1 P1 300
CodF NomeF NSoci Sede
F1 P2 200 AND CodP<> 'P2';
F1 Andrea 2 Torino
F1 P3 400
F2 Luca 1 Milano
F3 Antonio 3 Milano
F1
F1
P4
P5
200
100
A che interrogazione corrisponde?
F4 Gabriele 2 Torino
F1 P6 100
F5 Matteo 3 Venezia
F2 P1 300
F2 P2 400
F3 P2 200
R F4 P3 200
NomeF
F4 P4 300
Andrea
F4 P5 400
Luca
DB
MG Gabriele DB
MG

Soluzione errata (n.1) Concetto di esclusione (n.1)

SELECT NomeF Trovare il nome dei fornitori che non forniscono il


FROM F, FP prodotto P2
WHERE F.CodF=FP.CodF
AND CodP<> 'P2';
Occorre escludere dal risultato
i fornitori che forniscono il prodotto P2

Trovare il nome dei fornitori che forniscono


almeno un prodotto diverso da P2

DB
MG DB
MG

Concetto di esclusione (n.1) Concetto di esclusione (n.1)

Trovare il nome dei fornitori che non forniscono il Trovare il nome dei fornitori che non forniscono il
prodotto P2 prodotto P2

SELECT NomeF
?
FROM F
SELECT CodF WHERE CodF (SELECT CodF
Codici dei fornitori Codici dei fornitori
FROM FP che forniscono P2 FROM FP che forniscono P2
WHERE CodP='P2' WHERE CodP='P2');

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 12
Basi di dati Interrogazioni nidificate

Operatore NOT IN (n.1) Operatore NOT IN

Trovare il nome dei fornitori che non forniscono il Esprime il concetto di esclusione da un insieme di
prodotto P2 valori
NomeAttributo NOT IN (InterrogazioneNidificata)
SELECT NomeF
FROM F
WHERE CodF NOT IN (SELECT CodF Richiede di individuare in modo appropriato
Codici dei fornitori
FROM FP che forniscono P2
l’insieme da escludere
WHERE CodP='P2'); definito dall’interrogazione nidificata
Non appartiene

DB
MG DB
MG

NOT IN e algebra relazionale (n.1) NOT IN e algebra relazionale (n.1)

Trovare il nome dei fornitori che non forniscono il Trovare il nome dei fornitori che non forniscono il
prodotto P2 prodotto P2
pNomeF pNomeF
pNomeF

- F
- F p

pCodF pCodF pCodF pCodF


F sCodP='P2'
sCodP='P2' sCodP='P2'
F F
FP
FP FP p: F.CodF=FP.CodF
DB
MG DB
MG

Operatore NOT IN (n.2) Operatore NOT IN (n.2)

Trovare il nome dei fornitori che forniscono solo il Trovare il nome dei fornitori che forniscono solo il
prodotto P2 prodotto P2

Trovare il nome dei fornitori di P2 che SELECT CodF


Codici dei fornitori
che forniscono
non hanno mai fornito prodotti diversi da P2 FROM FP almeno un
WHERE CodP<>'P2' prodotto diverso
da P2
Insieme da escludere
fornitori di prodotti diversi da P2

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 13
Basi di dati Interrogazioni nidificate

Operatore NOT IN (n.2) Operatore NOT IN (n.2)

Trovare il nome dei fornitori che forniscono solo il Trovare il nome dei fornitori che forniscono solo il
prodotto P2 prodotto P2

SELECT NomeF SELECT NomeF


FROM F FROM F, FP
WHERE CodF NOT IN (SELECT CodF WHERE F.CodF NOT IN (SELECT F.CodF
FROM FP FROM FP
WHERE CodP<>'P2') WHERE CodP<>'P2')
... AND F.CodF=FP.CodF;

DB
MG DB
MG

Soluzione alternativa (n.2) Operatore NOT IN (n.3)

Trovare il nome dei fornitori che forniscono solo il Trovare il nome dei fornitori che non forniscono
prodotto P2 prodotti rossi

SELECT NomeF
FROM F
WHERE F.CodF NOT IN (SELECT CodF
FROM FP
WHERE CodP<>'P2')
AND F.CodF IN (SELECT CodF
FROM FP);

DB
MG DB
MG

Operatore NOT IN (n.3) Operatore NOT IN (n.3)

Trovare il nome dei fornitori che non forniscono Trovare il nome dei fornitori che non forniscono
prodotti rossi prodotti rossi

Insieme da escludere?
i fornitori di prodotti rossi, identificati dal loro (SELECT CodF
codice FROM FP
Codici dei fornitori WHERE CodP IN (SELECT CodP
di prodotti rossi
FROM P
WHERE Colore='Rosso')

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 14
Basi di dati Interrogazioni nidificate

Operatore NOT IN (n.3) Alternativa (corretta?) (n.3)

Trovare il nome dei fornitori che non forniscono Trovare il nome dei fornitori che non forniscono
prodotti rossi prodotti rossi
SELECT NomeF
FROM F
WHERE CodF NOT IN (SELECT CodF
FROM FP
Codici dei fornitori SELECT CodF
WHERE CodP IN (SELECT CodP che forniscono FROM FP
FROM P almeno un WHERE CodP NOT IN (SELECT CodP
WHERE Colore='Rosso')); prodotto non rosso
FROM P
WHERE Colore='Rosso')

DB
MG DB
MG

Alternativa (corretta?) (n.3) Alternativa errata (n.3)

Trovare il nome dei fornitori che non forniscono Trovare il nome dei fornitori che non forniscono
prodotti rossi prodotti rossi
SELECT NomeF SELECT NomeF
FROM F FROM F
WHERE CodF IN (SELECT CodF WHERE CodF IN (SELECT CodF
FROM FP FROM FP
WHERE CodP NOT IN (SELECT CodP Codici dei fornitori WHERE CodP NOT IN (SELECT CodP
FROM P di prodotti FROM P
non rossi
WHERE Colore='Rosso')); WHERE Colore='Rosso'));

DB
MG DB
MG

Alternativa errata (n.3) Alternativa errata (n.3)

Trovare il nome dei fornitori che non forniscono Trovare il nome dei fornitori che non forniscono
prodotti rossi FP prodotti rossi FP
P CodP NomeP Colore Taglia Magazzino
CodF CodP Qta
P CodP NomeP Colore Taglia Magazzino
CodF CodP Qta
F1 P1 300 F1 P1 300
P1 Maglia Rosso 40 Torino F1 P2 200 P1 Maglia Rosso 40 Torino F1 P2 200
P2 Jeans Verde 48 Milano F1 P3 400 P2 Jeans Verde 48 Milano F1 P3 400
P3 Camicia Blu 48 Roma F1 P4 200 P3 Camicia Blu 48 Roma F1 P4 200
P4 Camicia Blu 44 Torino F1 P5 100 P4 Camicia Blu 44 Torino F1 P5 100
P5 Gonna Blu 40 Milano F1 P6 100 P5 Gonna Blu 40 Milano F1 P6 100
P6 Bermuda Rosso 42 Torino F2 P1 300 P6 Bermuda Rosso 42 Torino F2 P1 300
F F2 P2 400 F F2 P2 400
CodF NomeF NSoci Sede F3 P2 200 CodF NomeF NSoci Sede F3 P2 200
F1 Andrea 2 Torino F4 P3 200 F1 Andrea 2 Torino F4 P3 200
F2 Luca 1 Milano F4 P4 300 F2 Luca 1 Milano F4 P4 300
F3 Antonio 3 Milano F4 P5 400 F3 Antonio 3 Milano F4 P5 400
F4 Gabriele 2 Torino F4 Gabriele 2 Torino
DB
MG F5 Matteo 3 Venezia DB
MG F5 Matteo 3 Venezia

Elena Baralis
©2007 Politecnico di Torino 15
Basi di dati Interrogazioni nidificate

Alternativa errata (n.3)

Trovare il nome dei fornitori che non forniscono


prodotti rossi
SELECT NomeF
FROM F
WHERE CodF IN (SELECT CodF
FROM FP Interrogazioni nidificate
WHERE CodP NOT IN (SELECT CodP
FROM P
WHERE Colore='Rosso'));

L'insieme di elementi da escludere non è corretto


DB
MG DB
MG

Costruttore di tupla Esempio (n.1)

VIAGGIO (CodV, LuogoPartenza, LuogoArrivo,


Permette di definire la struttura temporanea di
OraPartenza, OraArrivo)
una tupla
si elencano gli attributi che ne fanno parte tra () Trovare le coppie luogo di partenza e luogo di
arrivo per cui nessun viaggio dura più di 2 ore
(NomeAttributo1, NomeAttributo2, ...)

Permette di estendere il poter espressivo degli


operatori IN e NOT IN

DB
MG DB
MG

Esempio (n.1)

VIAGGIO (CodV, LuogoPartenza, LuogoArrivo,


OraPartenza, OraArrivo)
Trovare le coppie luogo di partenza e luogo di
arrivo per cui nessun viaggio dura più di 2 ore

SELECT LuogoPartenza, LuogoArrivo


FROM VIAGGIO Interrogazioni nidificate
WHERE (LuogoPartenza, LuogoArrivo) NOT IN
(SELECT LuogoPartenza, LuogoArrivo
Costruttore FROM VIAGGIO
di tupla WHERE OraArrivo-OraPartenza>2);

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 16
Basi di dati Interrogazioni nidificate

Operatore EXISTS (n.1) Condizione di correlazione (n.1)

Trovare il nome dei fornitori del prodotto P2 Trovare il nome dei fornitori del prodotto P2

SELECT NomeF
FROM F
Trovare il nome dei fornitori per cui esiste WHERE EXISTS (SELECT *
una fornitura del prodotto P2 FROM FP
WHERE CodP='P2'
AND FP.CodF=F.CodF );

Condizione di correlazione

DB
MG DB
MG

Funzionamento di EXISTS (n.1) Funzionamento di EXISTS (n.1)

Trovare il nome dei fornitori del prodotto P2 Trovare il nome dei fornitori del prodotto P2
F FP F FP
CodF NomeF NSoci Città CodF NomeF NSoci Città
F1 Andrea 2 Torino CodF CodP Qta F1 Andrea 2 Torino CodF CodP Qta
F2 Luca 1 Milano F1 P1 300 F2 Luca 1 Milano F1 P1 300
F3 Antonio 3 Milano F1 P2 200 F3 Antonio 3 Milano F1 P2 200
F4 Gabriele 2 Torino F1 P3 400 F4 Gabriele 2 Torino F1 P3 400
F5 Matteo 3 Venezia F1 P4 200 F5 Matteo 3 Venezia F1 P4 200
F1 P5 100 F1 P5 100
SELECT * F1 P6 100 F1 P6 100
Il predicato con EXISTS è
FROM FP F2 P1 300 F2 P1 300
F2 P2 400 vero per F1 poiché esiste una F2 P2 400
WHERE CodP='P2' F3 P2 200 fornitura di P2 per F1 F3 P2 200
AND FP.CodF='F1' F4 P3 200 F4 P3 200
F4 P4 300 F1 fa parte del risultato F4 P4 300
Valore di CodF nella F4 P5 400 dell'interrogazione F4 P5 400
DB
MG
riga corrente di F DB
MG

Funzionamento di EXISTS (n.1) Risultato dell’interrogazione (n.1)

Trovare il nome dei fornitori del prodotto P2 Trovare il nome dei fornitori del prodotto P2
F FP
CodF NomeF NSoci Città
F1 Andrea 2 Torino CodF CodP Qta
F2 Luca 1 Milano F1 P1 300 R
F1 P2 200 NomeF
F3 Antonio 3 Milano
F1 P3 400 Andrea
F4 Gabriele 2 Torino
F1 P4 200 Luca
F5 Matteo 3 Venezia
F1 P5 100 Antonio
F1 P6 100
Il predicato con EXISTS è F2 P1 300
falso per F4 poiché non esiste F2 P2 400
una fornitura di P2 per F4 F3 P2 200
F4 P3 200
F4 non fa parte del risultato F4 P4 300
dell'interrogazione F4 P5 400
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 17
Basi di dati Interrogazioni nidificate

Predicati con EXISTS Predicati con EXISTS

Il predicato contenente EXISTS è Il predicato contenente EXISTS è


vero se l'interrogazione interna restituisce almeno vero se l'interrogazione interna restituisce almeno
una tupla una tupla
falso se l'interrogazione interna restituisce falso se l'interrogazione interna restituisce
l'insieme vuoto l'insieme vuoto
Nell’interrogazione interna a EXISTS, la clausola
SELECT è obbligatoria, ma irrilevante, perchè gli
attributi non sono visualizzati
La condizione di correlazione lega l'esecuzione
dell'interrogazione interna al valore di attributi
della tupla corrente nell'interrogazione esterna
DB
MG DB
MG

Visibilità degli attributi

Un'interrogazione nidificata può far riferimento ad


attributi definiti in interrogazioni più esterne
Un'interrogazione non può far riferimento ad
attributi referenziati
in un'interrogazione nidificata al suo interno
in un'interrogazione allo stesso livello
Interrogazioni nidificate

DB
MG DB
MG

Operatore NOT EXISTS (n.1) Operatore NOT EXISTS (n.1)

Trovare il nome dei fornitori che non forniscono il Trovare il nome dei fornitori che non forniscono il
prodotto P2 prodotto P2

SELECT NomeF
FROM F
Trovare il nome dei fornitori per cui non esiste WHERE NOT EXISTS (SELECT *
una fornitura del prodotto P2 FROM FP
WHERE CodP='P2'
AND FP.CodF=F.CodF );
Condizione di correlazione

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 18
Basi di dati Interrogazioni nidificate

Funzionamento di NOT EXISTS (n.1) Funzionamento di NOT EXISTS (n.1)

Trovare il nome dei fornitori che non forniscono il Trovare il nome dei fornitori che non forniscono il
prodotto P2 prodotto P2
F F FP CodF CodP Qta
CodF NomeF NSoci Città CodF NomeF NSoci Città F1 P1 300
F1 Andrea 2 Torino F1 Andrea 2 Torino F1 P2 200
F2 Luca 1 Milano F2 Luca 1 Milano F1 P3 400
F3 Antonio 3 Milano F3 Antonio 3 Milano F1 P4 200
F4 Gabriele 2 Torino F4 Gabriele 2 Torino F1 P5 100
F5 Matteo 3 Venezia F5 Matteo 3 Venezia F1 P6 100
F2 P1 300
SELECT * SELECT * F2 P2 400
FROM FP FROM FP F3 P2 200
F4 P3 200
WHERE CodP='P2' AND WHERE CodP='P2' AND
F4 P4 300
FP.CodF='F1' FP.CodF='F1' F4 P5 400
Valore di CodF nella
DB
MG
riga corrente di F DB
MG

Funzionamento di NOT EXISTS (n.1) Funzionamento di NOT EXISTS (n.1)

Trovare il nome dei fornitori che non forniscono il Trovare il nome dei fornitori che non forniscono il
prodotto P2 prodotto P2
F FP CodF CodP Qta F FP CodF CodP Qta
CodF NomeF NSoci Città F1 P1 300 CodF NomeF NSoci Città F1 P1 300
F1 Andrea 2 Torino F1 P2 200 F1 Andrea 2 Torino F1 P2 200
F2 Luca 1 Milano F1 P3 400 F2 Luca 1 Milano F1 P3 400
F3 Antonio 3 Milano F1 P4 200 F3 Antonio 3 Milano F1 P4 200
F4 Gabriele 2 Torino F1 P5 100 F4 Gabriele 2 Torino F1 P5 100
F5 Matteo 3 Venezia F1 P6 100 F5 Matteo 3 Venezia F1 P6 100
F2 P1 300 F2 P1 300
Il predicato con NOT EXISTS è F2 P2 400 F2 P2 400

falso per F1 perché esiste una F3


F4
P2
P3
200
200
F3
F4
P2
P3
200
200
fornitura di P2 per F1 F4 P4 300 F4 P4 300
F1 non fa parte del risultato F4 P5 400 F4 P5 400

DB
MG
dell'interrogazione DB
MG

Funzionamento di NOT EXISTS (n.1) Funzionamento di NOT EXISTS (n.1)

Trovare il nome dei fornitori che non forniscono il Trovare il nome dei fornitori che non forniscono il
prodotto P2 prodotto P2
F F FP CodF CodP Qta
CodF NomeF NSoci Città CodF NomeF NSoci Città F1 P1 300
F1 Andrea 2 Torino F1 Andrea 2 Torino F1 P2 200
F2 Luca 1 Milano F2 Luca 1 Milano F1 P3 400
F3 Antonio 3 Milano F3 Antonio 3 Milano F1 P4 200
F4 Gabriele 2 Torino F4 Gabriele 2 Torino F1 P5 100
F5 Matteo 3 Venezia F5 Matteo 3 Venezia F1 P6 100
F2 P1 300
F2 P2 400
F3 P2 200
F4 P3 200
F4 P4 300
F4 P5 400

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 19
Basi di dati Interrogazioni nidificate

Funzionamento di NOT EXISTS (n.1) Funzionamento di NOT EXISTS (n.1)

Trovare il nome dei fornitori che non forniscono il Trovare il nome dei fornitori che non forniscono il
prodotto P2 prodotto P2
F FP CodF CodP Qta F FP CodF CodP Qta
CodF NomeF NSoci Città F1 P1 300 CodF NomeF NSoci Città F1 P1 300
F1 Andrea 2 Torino F1 P2 200 F1 Andrea 2 Torino F1 P2 200
F2 Luca 1 Milano F1 P3 400 F2 Luca 1 Milano F1 P3 400
F3 Antonio 3 Milano F1 P4 200 F3 Antonio 3 Milano F1 P4 200
F4 Gabriele 2 Torino F1 P5 100 F4 Gabriele 2 Torino F1 P5 100
F5 Matteo 3 Venezia F1 P6 100 F5 Matteo 3 Venezia F1 P6 100
F2 P1 300 F2 P1 300
Il predicato con NOT EXISTS è F2 P2 400 F2 P2 400

vero per F4 perché non esiste F3 P2 200 F3 P2 200


F4 P3 200 F4 P3 200
una fornitura di P2 per F4 F4 P4 300 F4 P4 300
F4 fa parte del risultato F4 P5 400 F4 P5 400

DB
MG
dell'interrogazione DB
MG

Risultato dell’interrogazione (n.1) Predicato con NOT EXISTS

Trovare il nome dei fornitori che non forniscono il Il predicato contenente NOT EXISTS è
prodotto P2 vero se l'interrogazione interna restituisce l'insieme
vuoto
falso se l'interrogazione interna restituisce almeno
R una tupla
NomeF
Gabriele La condizione di correlazione lega l'esecuzione
Matteo dell'interrogazione interna al valore di attributi
della tupla corrente nell'interrogazione esterna

DB
MG DB
MG

Correlazione tra interrogazioni

Può essere necessario legare la computazione di


un'interrogazione nidificata al valore di uno o più
attributi in un'interrogazione più esterna
il legame è espresso da una o più condizioni di
correlazione

Interrogazioni nidificate

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 20
Basi di dati Interrogazioni nidificate

Condizione di correlazione Correlazione tra interrogazioni (n.1)

Una condizione di correlazione Per ogni prodotto, trovare il codice del fornitore
è indicata nella clausola WHERE dell'interrogazione che ne fornisce la quantità massima
nidificata che la richiede
è un predicato che lega attributi di tabelle nella
FROM dell'interrogazione nidificata con attributi di
tabelle nella FROM di interrogazioni più esterne
Non si possono esprimere condizioni di
correlazione
in interrogazioni allo stesso livello di nidificazione
contenenti riferimenti ad attributi di una tabella
nella FROM di un'interrogazione nidificata

DB
MG DB
MG

Correlazione tra interrogazioni (n.1) Correlazione tra interrogazioni (n.1)

Per ogni prodotto, trovare il codice del fornitore Per ogni prodotto, trovare il codice del fornitore
che ne fornisce la quantità massima che ne fornisce la quantità massima

SELECT CodP, CodF SELECT CodP, CodF


FROM FP AS FPX FROM FP AS FPX
WHERE Qta = (... Quantità massima WHERE Qta = (SELECT MAX(Qta) Quantità
per il prodotto FROM FP AS FPY massima
) corrente ... )

DB
MG DB
MG

Correlazione tra interrogazioni (n.1) Correlazione tra interrogazioni (n.1)

Per ogni prodotto, trovare il codice del fornitore Per ogni prodotto, trovare il codice del fornitore
che ne fornisce la quantità massima che ne fornisce la quantità massima

SELECT CodP, CodF SELECT CodP, CodF


FROM FP AS FPX FROM FP AS FPX
Quantità
WHERE Qta = (SELECT MAX(Qta) WHERE Qta = (SELECT MAX(Qta)
massima
FROM FP AS FPY per il FROM FP AS FPY
WHERE FPY.CodP=FPX.CodP); prodotto WHERE FPY. CodP=FPX.CodP);
corrente
Condizione di correlazione

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 21
Basi di dati Interrogazioni nidificate

Correlazione tra interrogazioni (n.2) Correlazione tra interrogazioni (n.2)

VIAGGIO (CodV, LuogoPartenza, LuogoArrivo, VIAGGIO (CodV, LuogoPartenza, LuogoArrivo,


OraPartenza, OraArrivo) OraPartenza, OraArrivo)
Trovare il codice dei viaggi che hanno una durata Trovare il codice dei viaggi che hanno una durata
inferiore alla durata media dei viaggi sullo stesso inferiore alla durata media dei viaggi sullo stesso
percorso (caratterizzato dallo stesso luogo di percorso (caratterizzato dallo stesso luogo di
partenza e di arrivo) partenza e di arrivo)
SELECT CodV
FROM VIAGGIO AS VA
WHERE OraArrivo-OraPartenza < (... Durata
media
dei viaggi
sul percorso
) corrente
DB
MG DB
MG

Correlazione tra interrogazioni (n.2) Correlazione tra interrogazioni (n.2)

VIAGGIO (CodV, LuogoPartenza, LuogoArrivo, VIAGGIO (CodV, LuogoPartenza, LuogoArrivo,


OraPartenza, OraArrivo) OraPartenza, OraArrivo)
Trovare il codice dei viaggi che hanno una durata Trovare il codice dei viaggi che hanno una durata
inferiore alla durata media dei viaggi sullo stesso inferiore alla durata media dei viaggi sullo stesso
percorso (caratterizzato dallo stesso luogo di percorso (caratterizzato dallo stesso luogo di
partenza e di arrivo) partenza e di arrivo)
SELECT CodV SELECT CodV
FROM VIAGGIO AS VA FROM VIAGGIO AS VA
WHERE OraArrivo-OraPartenza < WHERE OraArrivo-OraPartenza <
(SELECT AVG(OraArrivo-OraPartenza) Durata (SELECT AVG(OraArrivo-OraPartenza)
FROM VIAGGIO AS VB media FROM VIAGGIO AS VB Condizioni di correlazione
... ) dei viaggi WHERE VB.LuogoPartenza=VA.LuogoPartenza
DB
MG DB G
M
AND VB.LuogoArrivo=VA.LuogoArrivo);

Operazione di divisione (n.1)

Trovare il codice dei fornitori che forniscono tutti i


prodotti
In algebra si utilizza l’operatore di divisione

Interrogazioni nidificate

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 22
Basi di dati Interrogazioni nidificate

Operazione di divisione (n.1) Divisione in SQL (n.1)

Trovare il codice dei fornitori che forniscono tutti i Trovare il codice dei fornitori che forniscono tutti
prodotti i prodotti
In algebra si utilizza l’operatore di divisione
Osservazione
R tutti i prodotti che possono essere forniti sono
contenuti nella tabella P
/

pCodF,CodP pCodP

un fornitore fornisce tutti i prodotti se fornisce un


FP P numero di prodotti diversi pari alla cardinalità di P

DB
MG DB
MG

Divisione in SQL (n.1) Divisione in SQL (n.1)

Trovare il codice dei fornitori che forniscono tutti Trovare il codice dei fornitori che forniscono tutti
i prodotti i prodotti

SELECT COUNT(*) SELECT COUNT(*) Numero


totale di
FROM P FROM P
prodotti

DB
MG DB
MG

Divisione in SQL (n.1) Divisione in SQL (n.1)

Trovare il codice dei fornitori che forniscono tutti Trovare il codice dei fornitori che forniscono tutti
i prodotti i prodotti
SELECT CodF SELECT CodF
FROM FP FROM FP
GROUP BY CodF GROUP BY CodF
… (SELECT COUNT(*) HAVING COUNT(*)=(SELECT COUNT(*)
FROM P) FROM P);

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 23
Basi di dati Interrogazioni nidificate

Divisione in SQL: procedimento (n.2) Divisione in SQL (n.2)

Trovare il codice dei fornitori che forniscono Trovare il codice dei fornitori che forniscono
almeno tutti i prodotti forniti dal fornitore F2 almeno tutti i prodotti forniti dal fornitore F2
Si esegue
il conteggio del numero di prodotti forniti da F2
il conteggio del numero di prodotti forniti da un
fornitore arbitrario e anche da F2
I due conteggi devono essere uguali

SELECT COUNT(*)
FROM FP
WHERE CodF='F2'

DB
MG DB
MG

Divisione in SQL (n.2) Divisione in SQL (n.2)

Trovare il codice dei fornitori che forniscono Trovare il codice dei fornitori che forniscono
almeno tutti i prodotti forniti dal fornitore F2 almeno tutti i prodotti forniti dal fornitore F2

SELECT CodF
FROM FP
WHERE CodP IN (SELECT CodP
FROM FP
WHERE CodF='F2')
GROUP BY CodF
SELECT COUNT(*) ... (SELECT COUNT(*)
Numero
FROM FP di prodotti FROM FP
WHERE CodF='F2' forniti da F2 WHERE CodF='F2')

DB
MG DB
MG

Divisione in SQL (n.2)

Trovare il codice dei fornitori che forniscono


almeno tutti i prodotti forniti dal fornitore F2

SELECT CodF
FROM FP
WHERE CodP IN (SELECT CodP
FROM FP Interrogazioni nidificate
WHERE CodF='F2')
GROUP BY CodF
HAVING COUNT(*)=(SELECT COUNT(*)
FROM FP
WHERE CodF='F2');

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 24
Basi di dati Interrogazioni nidificate

Schema di esempio Calcolo di aggregati a due livelli (n.1)

STUDENTE (Matricola, AnnoIscrizione) STUDENTE (Matricola, AnnoIscrizione)


ESAME-SUPERATO (Matricola, CodC, Data, Voto) ESAME-SUPERATO (Matricola, CodC, Data, Voto)
CORSO (CodC, NomeC)
Trovare la media massima (conseguita da uno
studente)
Risoluzione in 2 passi
trovare la media per ogni studente
trovare il valore massimo della media

DB
MG DB
MG

Calcolo di aggregati a due livelli (n.1) Calcolo di aggregati a due livelli (n.1)

STUDENTE (Matricola, AnnoIscrizione) STUDENTE (Matricola, AnnoIscrizione)


ESAME-SUPERATO (Matricola, CodC, Data, Voto) ESAME-SUPERATO (Matricola, CodC, Data, Voto)

Trovare la media massima (conseguita da uno Trovare la media massima (conseguita da uno
studente) studente)
passo 1: media per ogni studente passo 1: media per ogni studente

SELECT Matricola, AVG(Voto) AS MediaStudenti (SELECT Matricola, AVG(Voto) AS MediaStudenti


FROM ESAME-SUPERATO FROM ESAME-SUPERATO
GROUP BY Matricola GROUP BY Matricola) AS MEDIE

DB
MG DB
MG

Calcolo di aggregati a due livelli (n.1) Calcolo di aggregati a due livelli (n.1)

STUDENTE (Matricola, AnnoIscrizione) STUDENTE (Matricola, AnnoIscrizione)


ESAME-SUPERATO (Matricola, CodC, Data, Voto) ESAME-SUPERATO (Matricola, CodC, Data, Voto)

Trovare la media massima (conseguita da uno Trovare la media massima (conseguita da uno
studente) studente)
passo 2: valore massimo della media passo 2: valore massimo della media

SELECT ... SELECT MAX(MediaStudenti)


FROM (SELECT Matricola, AVG(Voto) AS MediaStudenti FROM (SELECT Matricola, AVG(Voto) AS MediaStudenti
FROM ESAME-SUPERATO FROM ESAME-SUPERATO
GROUP BY Matricola) AS MEDIE GROUP BY Matricola) AS MEDIE;

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 25
Basi di dati Interrogazioni nidificate

Table functions (n.1) Table function

STUDENTE (Matricola, AnnoIscrizione)


Definisce una tabella temporanea che può essere
ESAME-SUPERATO (Matricola, CodC, Data, Voto)
utilizzata per ulteriori operazioni di calcolo
Trovare la media massima (conseguita da uno La table function
studente) ha la struttura di una SELECT
è definita all'interno di una clausola FROM
SELECT MAX(MediaStudenti)
può essere referenziata come una normale tabella
FROM (SELECT Matricola, AVG(Voto) AS MediaStudenti
La table function permette di
FROM ESAME-SUPERATO
GROUP BY Matricola) AS MEDIE; calcolare più livelli di aggregazione
Table function formulare in modo equivalente le interrogazioni
che richiedono la correlazione

DB
MG DB
MG

Table functions (n.2) Table functions (n.2)

STUDENTE (Matricola, AnnoIscrizione) STUDENTE (Matricola, AnnoIscrizione)


ESAME-SUPERATO (Matricola, CodC, Data, Voto) ESAME-SUPERATO (Matricola, CodC, Data, Voto)

Per ogni anno di iscrizione, trovare la media Per ogni anno di iscrizione, trovare la media
massima (conseguita da uno studente) massima (conseguita da uno studente)
passo 1
Risoluzione in 2 passi
trovare la media per ogni studente
raggruppare gli studenti per anno di iscrizione e
(SELECT Matricola, AVG(Voto) AS MediaStudente
calcolare la media massima
FROM ESAME-SUPERATO
GROUP BY Matricola) AS MEDIE

DB
MG DB
MG

Table functions (n.2) Table functions (n.2)

STUDENTE (Matricola, AnnoIscrizione) STUDENTE (Matricola, AnnoIscrizione)


ESAME-SUPERATO (Matricola, CodC, Data, Voto) ESAME-SUPERATO (Matricola, CodC, Data, Voto)

Per ogni anno di iscrizione, trovare la media Per ogni anno di iscrizione, trovare la media
massima (conseguita da uno studente) massima (conseguita da uno studente)
passo 2 passo 2
SELECT ... SELECT ...
FROM STUDENTE, FROM STUDENTE,
(SELECT Matricola, AVG(Voto) AS MediaStudente Condizione (SELECT Matricola, AVG(Voto) AS MediaStudente
Table function FROM ESAME-SUPERATO di join FROM ESAME-SUPERATO
GROUP BY Matricola) AS MEDIE GROUP BY Matricola) AS MEDIE
WHERE STUDENTE.Matricola=MEDIE.Matricola WHERE STUDENTE.Matricola=MEDIE.Matricola
B ...
D MG B ...
D MG

Elena Baralis
©2007 Politecnico di Torino 26
Basi di dati Interrogazioni nidificate

Table functions (n.2) Table functions (n.2)

STUDENTE (Matricola, AnnoIscrizione) STUDENTE (Matricola, AnnoIscrizione)


ESAME-SUPERATO (Matricola, CodC, Data, Voto) ESAME-SUPERATO (Matricola, CodC, Data, Voto)

Per ogni anno di iscrizione, trovare la media Per ogni anno di iscrizione, trovare la media
massima (conseguita da uno studente) massima (conseguita da uno studente)
passo 2 passo 2
SELECT ... SELECT AnnoIscrizione, MAX(MediaStudente)
FROM STUDENTE, FROM STUDENTE,
(SELECT Matricola, AVG(Voto) AS MediaStudente (SELECT Matricola, AVG(Voto) AS MediaStudente
FROM ESAME-SUPERATO FROM ESAME-SUPERATO
GROUP BY Matricola) AS MEDIE GROUP BY Matricola) AS MEDIE
WHERE STUDENTE.Matricola=MEDIE.Matricola WHERE STUDENTE.Matricola=MEDIE.Matricola
GROUP BY AnnoIscrizione GROUP BY AnnoIscrizione;
DB
MG DB
MG

Correlazione con table function (n.3) Correlazione con table function (n.3)

Per ogni prodotto, trovare il codice del fornitore Per ogni prodotto, trovare il codice del fornitore
che ne fornisce la quantità massima che ne fornisce la quantità massima

SELECT CodP, CodF


FROM FP AS FPX
WHERE Qta = (SELECT MAX(Qta)
FROM FP AS FPY
WHERE FPY. CodP=FPX.CodP);
Condizione di correlazione

DB
MG DB
MG

Correlazione con table function (n.3) Correlazione con table function (n.3)

Per ogni prodotto, trovare il codice del fornitore Per ogni prodotto, trovare il codice del fornitore
che ne fornisce la quantità massima che ne fornisce la quantità massima
1) Calcolare la Qta massima fornita per ogni prodotto
2) Selezionare i fornitori che forniscono la Qta massima, SELECT CodP, CodF
prodotto per prodotto FROM FP,
(SELECT CodP, MAX(Qta) AS Mqta
FROM FP
GROUP BY CodP) AS TMax

WHERE FP.CodP = TMax.CodP


AND FP.Qta = TMax.Mqta;

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 27
Basi di dati Interrogazioni nidificate

Correlazione con table function (n.4) Correlazione con table function (n.4)

VIAGGIO (CodV, LuogoPartenza, LuogoArrivo, VIAGGIO (CodV, LuogoPartenza, LuogoArrivo,


OraPartenza, OraArrivo) OraPartenza, OraArrivo)
Trovare il codice dei viaggi che hanno una durata inferiore Trovare il codice dei viaggi che hanno una durata inferiore alla durata
alla durata media dei viaggi sullo stesso percorso media dei viaggi sullo stesso percorso (caratterizzato dallo stesso
(caratterizzato dallo stesso luogo di partenza e di arrivo) luogo di partenza e di arrivo)

SELECT CodV
FROM VIAGGIO AS VA
WHERE OraArrivo-OraPartenza <
(SELECT AVG(OraArrivo-OraPartenza)
FROM VIAGGIO AS VB Condizioni di correlazione
WHERE VB.LuogoPartenza=VA.LuogoPartenza
AND VB.LuogoArrivo=VA.LuogoArrivo);
DB
MG DB
MG

Correlazione con table function (n.4) Correlazione con table function (n.4)

VIAGGIO (CodV, LuogoPartenza, LuogoArrivo, VIAGGIO (CodV, LuogoPartenza, LuogoArrivo,


OraPartenza, OraArrivo) OraPartenza, OraArrivo)
Trovare il codice dei viaggi che hanno una durata inferiore alla durata Trovare il codice dei viaggi che hanno una durata inferiore alla durata
media dei viaggi sullo stesso percorso (caratterizzato dallo stesso media dei viaggi sullo stesso percorso (caratterizzato dallo stesso
luogo di partenza e di arrivo) luogo di partenza e di arrivo)

1) Calcolare la durata media dei viaggi per ogni percorso SELECT CodV
2) Selezionare i viaggi che hanno durata inferiore alla FROM VIAGGIO V,
media, percorso per percorso (SELECT LuogoArrivo, LuogoPartenza,
AVG(OraArrivo-OraPartenza) AS DurMed
FROM VIAGGIO
GROUP BY LuogoArrivo, LuogoPartenza) AS TMed
WHERE (OraArrivo-OraPartenza) < TMed.DurMed
AND V.LuogoPartenza = TMed.LuogoPartenza
AND V.LuogoArrivo = TMed.LuogoArrivo;
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino 28
Basi di dati Linguaggio SQL: Operatori insiemistici

Operatori insiemistici

Operatore UNION
Operatore INTERSECT
Operatore EXCEPT

Linguaggio SQL: fondamenti

DB
MG DB
MG

Operatore UNION

Operatore insiemistico di unione

A UNION B

Esegue l’unione delle due espressioni relazionali


AeB
Operatori insiemistici le espressioni relazionali A e B possono essere
generate da istruzioni SELECT
richiede la compatibilità di schema tra A e B
rimozione dei duplicati
UNION rimuove i duplicati
UNION ALL non rimuove i duplicati
DB
MG DB
MG

UNION: esempio UNION: esempio

Trovare il codice dei prodotti di colore rosso o Trovare il codice dei prodotti di colore rosso o
forniti dal fornitore F2 (o entrambe le cose) forniti dal fornitore F2 (o entrambe le cose)
FP
P CodF CodP Qta SELECT CodP
CodP NomeP Colore Taglia Magazzino F1 P1 300 FROM P
F1 P2 200
P1 Maglia Rosso 40 Torino WHERE Colore='Rosso'
P2 Jeans Verde 48 Milano F1 P3 400
P3 Camicia Blu 48 Roma F1 P4 200
P
P4 Camicia Blu 44 Torino F1 P5 100
CodP NomeP Colore Taglia Magazzino
P5 Gonna Blu 40 Milano F1 P6 100
P1 Maglia Rosso 40 Torino
P6 Bermuda Rosso 42 Torino F2 P1 300
P2 Jeans Verde 48 Milano
F2 P2 400 CodP
P3 Camicia Blu 48 Roma
F3 P2 200 P1
P4 Camicia Blu 44 Torino
F4 P3 200 P6
P5 Gonna Blu 40 Milano
F4 P4 300
DB
MG F4 P5 400 DB
MG
P6 Bermuda Rosso 42 Torino

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Linguaggio SQL: Operatori insiemistici

UNION: esempio UNION: esempio

Trovare il codice dei prodotti di colore rosso o Trovare il codice dei prodotti di colore rosso o
forniti dal fornitore F2 (o entrambe le cose) forniti dal fornitore F2 (o entrambe le cose)
FP
CodF CodP Qta
SELECT CodP SELECT CodP CodP
F1 P1 300
F1 P2 200 FROM FP FROM P P1 R
F1 P3 400 WHERE CodF='F2' WHERE Colore='Rosso' P6 CodP
P1
F1 P4 200 UNION P2
F1 P5 100
SELECT CodP CodP P6
F1 P6 100
F2 P1 300 CodP FROM FP P1
F2 P2 400 P1 WHERE CodF='F2'; P2
F3 P2 200 P2
F4 P3 200

DB DB
F4 P4 300
MG F4 P5 400 MG

UNION: esempio UNION: esempio

Trovare il codice dei prodotti di colore rosso o Trovare il codice dei prodotti di colore rosso o
forniti dal fornitore F2 (o entrambe le cose) forniti dal fornitore F2 (o entrambe le cose)

SELECT CodP SELECT CodP


FROM P R FROM P
Compatibilità
WHERE Colore='Rosso' CodP
di schema
WHERE Colore='Rosso'
UNION P1 UNION
P2
SELECT CodP SELECT CodP
Rimozione P6
FROM FP del duplicato FROM FP
WHERE CodF='F2'; WHERE CodF='F2';

DB
MG DB
MG

UNION ALL: esempio

Trovare il codice dei prodotti di colore rosso o


forniti dal fornitore F2 (o entrambe le cose)

SELECT CodP CodP


R
FROM P P1
CodP
WHERE Colore='Rosso' P6 P1
UNION ALL P1 Operatori insiemistici
P2
SELECT CodP CodP P6
FROM FP P1
WHERE CodF='F2'; P2

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Linguaggio SQL: Operatori insiemistici

Operatore INTERSECT INTERSECT: esempio

Operatore insiemistico di intersezione Trovare le città che sono sia sede di fornitori, sia
magazzino di prodotti
A INTERSECT B
P CodP NomeP Colore Taglia Magazzino

Esegue l’intersezione delle due espressioni


P1 Maglia Rosso 40 Torino
P2 Jeans Verde 48 Milano
relazionali A e B P3 Camicia Blu 48 Roma

le espressioni relazionali A e B possono essere P4 Camicia Blu 44 Torino


P5 Gonna Blu 40 Milano
generate da istruzioni SELECT P6 Bermuda Rosso 42 Torino
richiede la compatibilità di schema tra A e B
F CodF NomeF NSoci Sede
F1 Andrea 2 Torino
F2 Luca 1 Milano
F3 Antonio 3 Milano
F4 Gabriele 2 Torino
DB
MG DB
MG F5 Matteo 3 Venezia

INTERSECT: esempio INTERSECT: esempio

Trovare le città che sono sia sede di fornitori, sia Trovare le città che sono sia sede di fornitori, sia
magazzino di prodotti magazzino di prodotti
SELECT Sede SELECT Magazzino
FROM F FROM P

F P
CodF NomeF NSoci Sede Sede CodP NomeP Colore Taglia Magazzino Magazzino
F1 Andrea 2 Torino Torino P1 Maglia Rosso 40 Torino Torino
F2 Luca 1 Milano Milano P2 Jeans Verde 48 Milano Milano
F3 Antonio 3 Milano Milano P3 Camicia Blu 48 Roma Roma
F4 Gabriele 2 Torino Torino P4 Camicia Blu 44 Torino Torino
F5 Matteo 3 Venezia Venezia P5 Gonna Blu 40 Milano Milano
P6 Bermuda Rosso 42 Torino Torino
DB
MG DB
MG

INTERSECT: esempio Equivalenza con altri operatori

Trovare le città che sono sia sede di fornitori, sia L’operazione di intersezione può essere eseguita
magazzino di prodotti anche mediante
Sede
il join
Torino l’operatore IN
SELECT Sede Milano
Milano
FROM F R
Torino
INTERSECT Venezia
SELECT Magazzino Torino
Magazzino Milano
FROM P; Torino
Milano
Roma
Torino
Milano
DB
MG Torino DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Linguaggio SQL: Operatori insiemistici

Equivalenza con il join Equivalenza con il join: esempio

La clausola FROM contiene le relazioni interessate Trovare le città che sono sia sede di fornitori, sia
dall’intersezione magazzino di prodotti
La clausola WHERE contiene condizioni di join tra SELECT Sede
gli attributi presenti nella clausola SELECT delle FROM F, P
espressioni relazionali A e B WHERE F.Sede=P.Magazzino;

DB
MG DB
MG

Equivalenza con l’operatore IN Equivalenza con IN: esempio

Una delle due espressioni relazionali diviene Trovare le città che sono sia sede di fornitori, sia
un’interrogazione nidificata mediante l’operatore magazzino di prodotti
IN
SELECT Magazzino
Gli attributi nella clausola SELECT esterna, uniti FROM P
da un costruttore di tupla, costituiscono la parte WHERE Magazzino IN (SELECT Sede
sinistra dell’operatore IN FROM F);

DB
MG DB
MG

Operatore EXCEPT

Operatore insiemistico di differenza

A EXCEPT B

Sottrae l’espressione relazionale B all’espressione


relazionale A
Operatori insiemistici richiede la compatibilità di schema tra A e B

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Linguaggio SQL: Operatori insiemistici

EXCEPT: esempio EXCEPT: esempio

Trovare le città che sono sede di fornitori, ma non Trovare le città che sono sede di fornitori, ma non
magazzino di prodotti magazzino di prodotti
P CodP NomeP Colore Taglia Magazzino SELECT Sede
P1 Maglia Rosso 40 Torino
FROM F
P2 Jeans Verde 48 Milano
P3 Camicia Blu 48 Roma
P4 Camicia Blu 44 Torino
F
P5 Gonna Blu 40 Milano
CodF NomeF NSoci Sede Sede
P6 Bermuda Rosso 42 Torino
F1 Andrea 2 Torino Torino
F CodF NomeF NSoci Sede F2 Luca 1 Milano Milano
F1 Andrea 2 Torino F3 Antonio 3 Milano Milano
F2 Luca 1 Milano F4 Gabriele 2 Torino Torino
F3 Antonio 3 Milano F5 Matteo 3 Venezia Venezia
F4 Gabriele 2 Torino
DB
MG F5 Matteo 3 Venezia DB
MG

EXCEPT: esempio EXCEPT: esempio

Trovare le città che sono sede di fornitori, ma non Trovare le città che sono sede di fornitori, ma non
magazzino di prodotti magazzino di prodotti
SELECT Magazzino Sede
Torino
FROM P
Milano
SELECT Sede
Milano
FROM F Torino
P R
CodP NomeP Colore Taglia Magazzino Magazzino
EXCEPT Venezia

P1 Maglia Rosso 40 Torino Torino SELECT Magazzino Magazzino Venezia


P2 Jeans Verde 48 Milano Milano FROM P; Torino
P3 Camicia Blu 48 Roma Roma Milano
P4 Camicia Blu 44 Torino Torino Roma
P5 Gonna Blu 40 Milano Milano Torino
P6 Bermuda Rosso 42 Torino Torino
DB DB
Milano
MG MG Torino

Equivalenza con l’operatore NOT IN Equivalenza con l’operatore NOT IN: esempio

L’operazione di differenza può essere eseguita Trovare le città che sono sede di fornitori, ma non
anche mediante l’operatore NOT IN magazzino di prodotti
l’espressione relazionale B è nidificata all’interno
SELECT Sede
dell’operatore NOT IN
FROM F
gli attributi nella clausola SELECT dell’espressione
WHERE Sede NOT IN (SELECT Magazzino
relazionale A, uniti da un costruttore di tupla,
FROM P);
costituiscono la parte sinistra dell’operatore NOT
IN

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Istruzioni di aggiornamento

Istruzioni di aggiornamento

Introduzione
Istruzione INSERT
Istruzione DELETE
Istruzione UPDATE

Linguaggio SQL: fondamenti

DB
MG DB
MG
2

Istruzioni di aggiornamento (1/3)

Inserimento di tuple
Cancellazione di tuple
Modifica di tuple

Istruzioni di aggiornamento

DB
MG DB
MG
4

Istruzioni di aggiornamento (2/3) Istruzioni di aggiornamento (3/3)

INSERT Le operazioni di aggiornamento modificano lo


inserimento di nuove tuple in una tabella stato della base di dati
DELETE è necessario verificare che siano rispettati i vincoli
cancellazione di tuple da una tabella di integrità

UPDATE Ogni istruzione può aggiornare il contenuto di


una sola tabella
modifica del contenuto di tuple in una tabella

DB
MG
5
DB
MG
6

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Istruzioni di aggiornamento

Istruzione INSERT

Inserimento di una sola tupla


assegnazione di un valore costante ad ogni
attributo
Inserimento di più tuple
lette da altre tabelle mediante un’istruzione
SELECT
Istruzioni di aggiornamento

DB
MG DB
MG
8

Inserimento di una tupla Inserimento di una tupla: esempio (n.1)

INSERT INTO NomeTabella Inserire il prodotto P7 con nome: maglia, colore:


[(ElencoColonne)] viola, taglia: 40, città: Venezia
VALUES (ElencoCostanti);
INSERT INTO P (CodP, NomeP, Colore, Taglia, Città)
VALUES ('P7', 'Maglia', 'Viola',40,'Venezia');

È inserita nella tabella P una nuova tupla con i


valori specificati

DB
MG
9
DB
MG
10

Inserimento di una tupla: esempio (n.1) Inserimento di una tupla: esempio (n.2)

Inserire il prodotto P7 con nome: maglia, colore: Inserire il prodotto P8 con città: Genova, taglia:
viola, taglia: 40, città: Venezia 42
INSERT INTO P (CodP, Città, Taglia)
INSERT INTO P (CodP, NomeP, Colore, Taglia, Città)
VALUES ('P8', 'Genova', 42);
VALUES ('P7', 'Maglia', 'Viola',40,'Venezia');

Omettere la lista dei campi equivale a specificare È inserita nella tabella P una nuova tupla con i
tutti i campi secondo l'ordine di creazione delle valori specificati
colonne nella tabella a NomeP e Colore è assegnato il valore NULL
Se la tabella cambia schema, l’istruzione non è più Per tutti gli attributi il cui valore non è specificato,
applicabile il dominio dell’attributo deve consentire il valore
DB 11 B GNULL 12
MG DM

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Istruzioni di aggiornamento

Inserimento: integrità referenziale Inserimento di più record

Inserire una nuova fornitura relativa al fornitore INSERT INTO NomeTabella


F20, prodotto P20 e quantità 1000 [(ElencoColonne)]
Interrogazione;
INSERT INTO FP (CodF, CodP, Qta)
VALUES ('F20', 'P20', 1000);
Sono inserite in NomeTabella tutte le tuple
selezionate dall’interrogazione Interrogazione
Vincolo di integrità referenziale
Interrogazione è un’istruzione SELECT arbitraria
è necessario che P20 e F20 siano già presenti
rispettivamente in P e F non può contenere la clausola ORDER BY
se il vincolo non è soddisfatto, l’inserimento non
deve essere eseguito

DB
MG
13
DB
MG
14

Inserimento di più record: esempio Inserimento di più record: esempio

FORNITURE-TOTALI (CodP, TotQta) FORNITURE-TOTALI (CodP, TotQta)

Per ogni prodotto, inserire nella tabella Per ogni prodotto, inserire nella tabella
FORNITURE-TOTALI la quantità totale fornita FORNITURE-TOTALI la quantità totale fornita
dati aggregati estratti dalla tabella FP
INSERT INTO FORNITURE-TOTALI (CodP, TotQta)
SELECT CodP, SUM(Qta) (SELECT CodP, SUM(Qta)
FROM FP FROM FP
GROUP BY CodP GROUP BY CodP);

DB
MG
15
DB
MG
16

Istruzione DELETE

DELETE FROM NomeTabella


[ WHERE predicato];
Cancellazione dalla tabella NomeTabella di tutte
le tuple che soddisfano il predicato
Occorre sempre verificare che la cancellazione
Istruzioni di aggiornamento non causi la violazione di vincoli di integrità
referenziale

DB
MG DB
MG
18

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Istruzioni di aggiornamento

Istruzione DELETE: esempio (n.1) Istruzione DELETE: esempio (n.2)

Cancellare tutte le forniture Cancellare la tupla corrispondente al fornitore con


codice F1
DELETE FROM FP; DELETE FROM F
WHERE CodF='F1';
Se in FP esistono forniture che fanno riferimento
Senza clausola WHERE tutte le tuple soddisfano il ai fornitori cancellati, la base di dati perde la
predicato di selezione propria integrità
elimina il contenuto della tabella FP avviene una violazione del vincolo di integrità
la tabella non è eliminata referenziale tra FP e F
occorre propagare la cancellazione

DB
MG
19
DB
MG
20

Istruzione DELETE: esempio (n.2) Istruzione DELETE: esempio complesso

Cancellare la tupla corrispondente al fornitore con Cancellare i fornitori di Milano


codice F1
DELETE FROM F
DELETE FROM F WHERE Sede='Milano';
WHERE CodF='F1';

DELETE FROM FP Se in FP esistono forniture che fanno riferimento


WHERE CodF='F1'; ai fornitori cancellati, è violato il vincolo di
integrità referenziale tra FP e F
Per mantenere la coerenza è necessario occorre cancellare anche tali forniture in FP
completare le operazioni su entrambe le tabelle

DB
MG
21
DB
MG
22

Istruzione DELETE: esempio complesso Istruzione DELETE: esempio complesso

Cancellare i fornitori di Milano Ordine corretto di esecuzione

DELETE FROM F DELETE FROM FP


WHERE Sede='Milano'; WHERE CodF IN (SELECT CodF
FROM F
WHERE Sede=‘Milano');
DELETE FROM FP
WHERE CodF IN (SELECT CodF
FROM F DELETE FROM F
WHERE Sede='Milano'); WHERE Sede=‘Milano';

In quale ordine devono essere eseguite le due


operazioni di cancellazione?
DB
MG
23
DB
MG
24

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Istruzioni di aggiornamento

Istruzione UPDATE

UPDATE NomeTabella
SET colonna = espressione
{, colonna=espressione}
[ WHERE predicato];

Istruzioni di aggiornamento Tutti i record della tabella NomeTabella che


soddisfano il predicato sono modificati in base
alle assegnazioni colonna=espressione nella
clausola SET

DB
MG DB
MG
26

Aggiornamento di una tupla Aggiornamento multiplo

Aggiornare le caratteristiche del prodotto P1: Aggiornare il numero dei soci al doppio del valore
assegnare giallo al colore, incrementare la taglia per tutti i fornitori di Milano
di 2 e assegnare NULL a città
UPDATE P UPDATE F
SET Colore = 'Giallo', SET NSoci=2*NSoci
Taglia=Taglia+2, WHERE Città='Milano';
Città = NULL
WHERE CodP='P1';
Sono aggiornate tutte le tuple individuate dal
predicato nella clausola WHERE
È aggiornata la tupla individuata dal codice P1

DB
MG
27
DB
MG
28

Aggiornamento con sottointerrogazione Aggiornamento di più tabelle

Aggiornare a 10 la quantità fornita per tutti i Modificare con il valore F9 il codice del fornitore
fornitori di Milano F2
UPDATE F
UPDATE FP SET CodF='F9'
SET Qta = 10 WHERE CodF='F2';
WHERE CodF IN (SELECT CodF
FROM F Se in FP esistono forniture che fanno riferimento
WHERE Sede='Milano'); ai codici dei fornitori aggiornati, è violato il vincolo
di integrità referenziale
occorre aggiornare anche tali forniture in FP

DB
MG
29
DB
MG
30

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Istruzioni di aggiornamento

Aggiornamento di più tabelle

Modificare con il valore F9 il codice del fornitore


F2
UPDATE F
SET CodF='F9'
WHERE CodF='F2';

UPDATE FP
SET CodF='F9'
WHERE CodF='F2';

Per mantenere la coerenza è necessario


completare l'aggiornamento di entrambe le tabelle
DB
MG
31

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Gestione delle tabelle

Creazione di una tabella


Modifica della struttura di una tabella
Cancellazione di una tabella
Dizionario dei dati
Integrità dei dati
Linguaggio SQL: fondamenti

DB
MG DB
MG

Creazione di una tabella (1/3)

Si utilizza l’istruzione di SQL DDL (Data Definition


Language)

CREATE TABLE

Permette di
Gestione delle tabelle definire tutti gli attributi (le colonne) della tabella
definire vincoli di integrità sui dati della tabella

DB
MG DB
MG

Creazione di una tabella (2/3) Creazione di una tabella (3/3)

Dominio
definisce il tipo di dato dell’attributo
CREATE TABLE NomeTabella domini predefiniti del linguaggio SQL (domini
(NomeAttributo Dominio [ValoreDiDefault ] elementari)
[Vincoli] domini definiti dall’utente a partire dai domini
{ , NomeAttributo Dominio [ValoreDiDefault ] predefiniti
[Vincoli ]} Vincoli
AltriVincoli permette di specificare vincoli di integrità
); sull’attributo
AltriVincoli
permette di specificare vincoli di integrità di tipo
generale sulla tabella
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Definizione di domini (1/2) Definizione di domini (2/2)

ValoreDiDefault GenericoValore
permette di specificare il valore di default valore compatibile con il dominio
dell’attributo *USER
DEFAULT identificativo dell’utente
< GenericoValore | USER | CURRENT_USER | NULL
SESSION_USER | SYSTEM_USER | NULL> valore di default di base

DB
MG DB
MG

Domini elementari (1/6) Domini elementari (2/6)

Carattere: singoli caratteri o stringhe, anche di Numerici esatti


lunghezza variabile
NUMERIC [( Precisione, Scala )]
DECIMAL [( Precisione, Scala )]
CHARACTER [VARYING] [(Lunghezza)]
INTEGER
[CHARACTER SET NomeFamigliaCaratteri]
SMALLINT
abbreviato con VARCHAR

Bit singoli (booleani) o stringhe di bit NUMERIC e DECIMAL sono numeri in base
decimale
BIT [VARYING] [(Lunghezza)]

DB
MG DB
MG

Domini elementari (3/6) Domini elementari (3/6)

NUMERIC [( Precisione, Scala )] NUMERIC [( Precisione, Scala )]


DECIMAL [( Precisione, Scala )] DECIMAL [( Precisione, Scala )]
Precisione Scala
numero totale di cifre (digits) numero di cifre dopo la virgola
per il dominio NUMERIC la precisione rappresenta Esempio: per il numero 123.45
un valore esatto la precisione è 5, mentre la scala è 2
per il dominio DECIMAL la precisione costituisce un
requisito minimo

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Domini elementari (4/6) Domini elementari (5/6)

Numerici approssimati INTERVAL PrimaUnitàDiTempo


[TO UltimaUnitàDiTempo]
FLOAT [(n)]
REAL Le unità di tempo sono divise in due gruppi
DOUBLE PRECISION anno, mese
n specifica la precisione giorno, ora, minuti, secondi
è il numero di bit utilizzati per memorizzare la Esempio: INTERVAL year TO month
mantissa di un numero float rappresentato in memorizza un periodo di tempo utilizzando i campi
notazione scientifica anno e mese
è un valore compreso tra 1 e 53 Esempio: INTERVAL day TO second
il valore di default è 53 memorizza un periodo di tempo utilizzando i campi
giorno, ore, minuti e secondi
DB
MG DB
MG

Domini elementari (6/6) Definizione di domini (1/2)

TIMESTAMP [(Precisione)] [WITH TIME ZONE] Istruzione CREATE DOMAIN


memorizza i valori che specificano l’anno, il mese, il definisce un dominio utilizzabile nelle definizioni di
giorno, l’ora, i minuti, i secondi ed eventualmente attributi
la frazione di secondo
utilizza 19 caratteri più i caratteri per rappresentare
la precisione Sintassi
CREATE DOMAIN NomeDominio AS TipoDiDato
notazione
[ ValoreDiDefault ] [ Vincolo ]
YYYY-MM-DD hh:mm:ss:p

TipoDiDato è un dominio elementare

DB
MG DB
MG

Definizione di domini (2/2) Definizione del DB fornitori prodotti

Esempio Creazione della tabella fornitori

CREATE DOMAIN Voto AS SMALLINT F


CodF NomeF NSoci Sede
DEFAULT NULL
CHECK (Voto >= 18 and Voto <=30) CREATE TABLE F (CodF CHAR(5),
NomeF CHAR(20),
NSoci SMALLINT,
Sede CHAR(15));

Manca la definizione dei vincoli di integrità


DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Definizione del DB fornitori prodotti Definizione del DB fornitori prodotti

Creazione della tabella prodotti Creazione della tabella forniture

P FP
CodP NomeP Colore Taglia Magazzino CodF CodP Qta

CREATE TABLE P (CodP CHAR(6), CREATE TABLE FP (CodF CHAR(5),


NomeP CHAR(20), CodP CHAR(6),
Colore CHAR(6), Qta INTEGER);
Taglia SMALLINT,
Magazzino CHAR(15));

Manca la definizione dei vincoli di integrità Manca la definizione dei vincoli di integrità
DB
MG DB
MG

Istruzione ALTER TABLE (1/3)

Sono possibili le seguenti “alterazioni”


aggiunta di una nuova colonna
definizione di nuovo valore di default per una
colonna (attributo) esistente
per esempio, sostituzione del precedente valore di
default
Gestione delle tabelle eliminazione di una colonna (attributo) esistente
definizione di un nuovo vincolo di integrità
eliminazione di un vincolo di integrità esistente

DB
MG DB
MG

Istruzione ALTER TABLE (2/3) Istruzione ALTER TABLE (3/3)

ALTER TABLE NomeTabella RESTRICT


< ADD COLUMN <Definizione-Attributo> | l’elemento (colonna o vincolo) non è rimosso se è
ALTER COLUMN NomeAttributo presente in qualche definizione di un altro
< SET <Definizione-Valore-Default> | DROP DEFAULT>| elemento
DROP COLUMN NomeAttributo
opzione di default
< CASCADE | RESTRICT > |
ADD CONSTRAINT [NomeVincolo] CASCADE
< definizione-vincolo-unique > | tutti gli elementi che dipendono da un elemento
< definizione-vincolo-integrità-referenziale > | rimosso vengono rimossi, fino a quando non
< definizione-vincolo-check > | esistono più dipendenze non risolte (cioè non vi
DROP CONSTRAINT [NomeVincolo] sono elementi nella cui definizione compaiono
< CASCADE | RESTRICT > elementi che sono stati rimossi)
>
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Istruzione ALTER TABLE: esempio n.1 Istruzione ALTER TABLE: esempio n.2

Aggiungere la colonna numero dipendenti alla Eliminare la colonna NSoci dalla tabella dei
tabella dei fornitori fornitori
F F
CodF NomeF NSoci Sede NDipendenti CodF NomeF NSoci Sede

ALTER TABLE F ALTER TABLE F


ADD COLUMN NDipendenti SMALLINT; DROP COLUMN NSoci RESTRICT;

DB
MG DB
MG

Istruzione ALTER TABLE: esempio n.3

Aggiungere il valore di default 0 alla colonna


quantità della tabella delle forniture
FP
CodF CodP Qta

ALTER TABLE FP Gestione delle tabelle


ALTER COLUMN Qta SET DEFAULT 0;

DB
MG DB
MG

Cancellazione di una tabella Cancellazione di una tabella: esempio

DROP TABLE NomeTabella Cancellare la tabella fornitori


[ RESTRICT | CASCADE];
F
Tutte le righe della tabella sono eliminate CodF NomeF NSoci Sede
insieme alla tabella
RESTRICT
DROP TABLE F;
la tabella non è rimossa se è presente in qualche
definizione di tabella, vincolo o vista
opzione di default
CASCADE
se la tabella compare in qualche definizione di
DB vista anche questa è rimossa DB
MG MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Dizionario dei dati (1/2)

I metadati sono informazioni (dati) sui dati


possono essere memorizzati in tabelle della base di
dati
Il dizionario dei dati contiene i metadati di una
base di dati relazionale
contiene informazioni sugli oggetti della base di
Gestione delle tabelle dati
è gestito direttamente dal DBMS relazionale
può essere interrogato con istruzioni SQL

DB
MG DB
MG

Dizionario dei dati (2/2) Informazioni sulle tabelle

Contiene diverse informazioni Il dizionario dei dati contiene per ogni tabella della
descrizione di tutte le strutture (tabelle, indici, base di dati
viste) della base di dati nome della tabella e struttura fisica del file in cui è
stored procedure SQL memorizzata
privilegi degli utenti nome e tipo di dato per ogni attributo
statistiche nome di tutti gli indici creati sulla tabella
sulle tabelle della base di dati vincoli di integrità
sugli indici della base di dati
sulle viste della base di dati
sulla crescita della base di dati

DB
MG DB
MG

Tabelle del dizionario dati Dizionario dati in Oracle (1/2)

Le informazioni del dizionario dati sono In Oracle sono definite 3 collezioni di informazioni
memorizzate in alcune tabelle per il dizionario dati
ogni DBMS utilizza nomi diversi USER_*: metadati relativi ai dati dell’utente
per tabelle diverse corrente
È possibile interrogare il dizionario dati mediante ALL_*: metadati relativi ai dati di tutti gli utenti
istruzioni SQL DBA_*: metadati delle tabelle di sistema

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Dizionario dati in Oracle (2/2) Interrogazione del dizionario dati n.1

Visualizzare il nome delle tabelle definite


USER_* contiene diverse tabelle e viste, tra le
dall’utente e il numero di tuple memorizzate in
quali:
ciascuna di esse
USER_TABLES contiene metadati relativi alle
tabelle dell’utente
USER_TAB_STATISTICS contiene le statistiche SELECT Table_Name, Num_Rows
calcolate sulle tabelle dell’utente FROM USER_TABLES;
USER_TAB_COL_STATISTICS contiene le
R
statistiche calcolate sulle colonne delle tabelle
Table_Name Num_Rows
dell’utente F 5
P 6
FP 12

DB
MG DB
MG

Interrogazione del dizionario dati n.2 (1/2) Interrogazione del dizionario dati n.2 (2/2)

Per ogni attributo della tabella delle forniture, SELECT Column_Name, Num_Distinct, Num_Nulls
visualizzare il nome dell’attributo, il numero di FROM USER_TAB_COL_STATISTICS
valori diversi e il numero di tuple che assumono WHERE Table_Name = 'FP'
valore NULL ORDER BY Column_Name;

SELECT Column_Name, Num_Distinct, Num_Nulls


R
FROM USER_TAB_COL_STATISTICS Column_Name Num_Distinct Num_Nulls
WHERE Table_Name = 'FP' CodF 4 0
CodP 6 0
ORDER BY Column_Name; Qta 4 0

DB
MG DB
MG

Vincoli di integrità

I dati all’interno di una base di dati sono corretti


se soddisfano un insieme di regole di correttezza
le regole sono dette vincoli di integrità
esempio: Qta >=0
Le operazioni di modifica dei dati definiscono un
nuovo stato della base dati, non necessariamente
Gestione delle tabelle
corretto

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Verifica dell’integrità Procedure applicative

La verifica della correttezza dello stato di una All’interno di ogni applicazione sono previste tutte
base di dati può essere effettuata le verifiche di correttezza necessarie
dalle procedure applicative, che effettuano tutte le Vantaggi
verifiche necessarie approccio molto efficiente
mediante la definizione di vincoli di integrità sulle
Svantaggi
tabelle
è possibile “aggirare” le verifiche interagendo
mediante la definizione di trigger
direttamente con il DBMS
un errore di codifica può avere un effetto
significativo sulla base di dati
la conoscenza delle regole di correttezza è
tipicamente “nascosta” nelle applicazioni
DB
MG DB
MG

Vincoli di integrità sulle tabelle (1/2) Vincoli di integrità sulle tabelle (2/2)

I vincoli di integrità sono Vantaggi


definiti nelle istruzioni CREATE o ALTER TABLE definizione dichiarativa dei vincoli, la cui verifica è
memorizzati nel dizionario dati di sistema affidata al sistema
il dizionario dei dati descrive tutti i vincoli presenti
Durante l’esecuzione di qualunque operazione di
nel sistema
modifica dei dati il DBMS verifica
unico punto centralizzato di verifica
automaticamente che i vincoli siano osservati
impossibilità di aggirare la verifica dei vincoli

DB
MG DB
MG

Vincoli di integrità sulle tabelle (2/2) Trigger (1/2)

Vantaggi I trigger sono procedure eseguite in modo


definizione dichiarativa dei vincoli, la cui verifica è automatico quando si verificano opportune
affidata al sistema modifiche dei dati
il dizionario dei dati descrive tutti i vincoli presenti definiti nell’istruzione CREATE TRIGGER
nel sistema
memorizzati nel dizionario dati del sistema
unico punto centralizzato di verifica
Quando si verifica un evento di modifica dei dati
impossibilità di aggirare la verifica dei vincoli
sotto il controllo del trigger, la procedura viene
Svantaggi eseguita automaticamente
possono rallentare l’esecuzione delle applicazioni
non è possibile definire tipologie arbitrarie di
vincoli
esempio: vincoli su dati aggregati
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Trigger (2/2) Riparazione delle violazioni

Vantaggi Se un’applicazione tenta di eseguire


permettono di definire vincoli d’integrità di tipo un’operazione che violerebbe un vincolo, il
complesso sistema può
normalmente usati insieme alla definizione di vincoli impedire l’operazione, causando un errore di
sulle tabelle esecuzione dell’applicazione
unico punto centralizzato di verifica eseguire un’azione compensativa tale da
impossibilità di aggirare la verifica dei vincoli raggiungere un nuovo stato corretto
Svantaggi esempio: quando si cancella un fornitore, cancellare
anche tutte le sue forniture
applicativamente complessi
possono rallentare l’esecuzione delle applicazioni

DB
MG DB
MG

Vincoli d'integrità in SQL-92 Vincoli di tabella (1/2)

Nello standard SQL-92 è stata introdotta la Sono definiti su una o più colonne di una tabella
possibilità di specificare i vincoli di integrità in Sono definiti nelle istruzioni di creazione di
modo dichiarativo, affidando al sistema la verifica tabelle
della loro consistenza domini
vincoli di tabella
Tipologie di vincolo
restrizioni sui dati permessi nelle colonne di una
tabella chiave primaria
vincoli d'integrità referenziale ammissibilità del valore nullo
gestione dei riferimenti tra tabelle diverse unicità
basati sul concetto di chiave esterna vincoli generali di tupla

DB
MG DB
MG

Vincoli di tabella (2/2) Chiave primaria

Sono verificati dopo ogni istruzione SQL che La chiave primaria è un insieme di attributi che
opera sulla tabella soggetta al vincolo identifica in modo univoco le righe di una tabella
inserimento di nuovi dati Può essere specificata una sola chiave primaria
modifica del valore di colonne soggette al vincolo per una tabella
Se il vincolo è violato, l’istruzione SQL che ha Definizione della chiave primaria
causato la violazione genera un errore di composta da un solo attributo
esecuzione
NomeAttributo Dominio PRIMARY KEY

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Chiave primaria: esempio n. 1 Chiave primaria

La chiave primaria è un insieme di attributi che


identifica in modo univoco le righe di una tabella
CREATE TABLE F (CodF CHAR(5) PRIMARY KEY, Può essere specificata una sola chiave primaria
NomeF CHAR(20), per una tabella
NSoci SMALLINT, Definizione della chiave primaria
Sede CHAR(15)); composta da uno o più attributi

PRIMARY KEY (ElencoAttributi )

DB
MG DB
MG

Chiave primaria: esempio n. 2 Ammissibilità del valore nullo

Il valore NULL indica l’assenza di informazioni


Quando è obbligatorio specificare sempre un
CREATE TABLE FP (CodF CHAR(5), valore per l’attributo
CodP CHAR(6),
NomeAttributo Dominio NOT NULL
Qta INTEGER
PRIMARY KEY (CodF, CodP)); il valore nullo non è ammesso

DB
MG DB
MG

NOT NULL: esempio Unicità

Un attributo o un insieme di attributi non può


assumere lo stesso valore in righe diverse della
CREATE TABLE F (CodF CHAR(5), tabella
NomeF CHAR(20) NOT NULL, per un solo attributo
NSoci SMALLINT, NomeAttributo Dominio UNIQUE
Sede CHAR(15));
per uno o più attributo

UNIQUE (ElencoAttributi )
È ammessa la ripetizione del valore NULL
(considerato sempre diverso)

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Chiave candidata Unicità: esempio

La chiave candidata è un insieme di attributi che


potrebbe assumere il ruolo di chiave primaria
è univoca CREATE TABLE P (CodP CHAR(6),
può non ammettere il valore nullo NomeP CHAR(20) NOT NULL UNIQUE,
Colore CHAR(6),
La combinazione UNIQUE NOT NULL permette di
definire una chiave candidata che non ammette Taglia SMALLINT,
valori nulli Magazzino CHAR(15));

NomeAttributo Dominio UNIQUE NOT NULL

DB
MG DB
MG

Vincoli generali di tupla Vincoli generali di tupla: esempio

Permettono di esprimere condizioni di tipo


generale su ogni tupla
CREATE TABLE F (CodF CHAR(5) PRIMARY KEY,
vincoli di tupla o di dominio
NomeF CHAR(20) NOT NULL,
NomeAttributo Dominio CHECK (Condizione ) NSoci SMALLINT
possono essere indicati come condizione i predicati CHECK (NSoci>0),
specificabili nella clausola WHERE
Sede CHAR(15));
La base di dati è corretta se la condizione è vera

DB
MG DB
MG

Vincoli d’integrità referenziale Definizione della chiave esterna

Permettono di gestire il legame tra tabelle La chiave esterna è definita nell’istruzione


mediante il valore di attributi CREATE TABLE della tabella referenziante
Esempio F
CodF NomeF NSoci Sede FOREIGN KEY (ElencoAttributiReferenzianti )
FP REFERENCES
CodF CodP Qta NomeTabella [(ElencoAttributiReferenziati )]
la colonna CodF di FP può assumere valori già
presenti nella colonna CodF di F Se gli attributi referenziati hanno lo stesso nome
CodF in FP: colonna referenziante (o chiave esterna) di quelli referenzianti, non è obbligatorio
CodF in F: colonna referenziata (tipicamente la specificarli
chiave primaria)

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Definizione della chiave esterna: esempio Gestione dei vincoli: esempio n.1

Tabella FP (referenziante)
CREATE TABLE FP (CodF CHAR(5), insert (nuova tupla) -> No
CodP CHAR(6), update (CodF) -> No
Qta INTEGER, delete (tupla) -> Ok
PRIMARY KEY (CodF, CodP), Tabella F (referenziata)
FOREIGN KEY (CodF) insert (nuova tupla) -> Ok
REFERENCES F(CodF), update (CodF) -> aggiornare in cascata
FOREIGN KEY (CodP) (cascade)
REFERENCES P(CodP)); delete (tupla) -> aggiornare in cascata
(cascade)
impedire l’azione
DB
MG DB
MG (no action)

Gestione dei vincoli: esempio n.2 (1/3) Gestione dei vincoli: esempio n.2 (2/3)

Impiegati (Matr, NomeI, Residenza, DNum) Impiegati (referenziante)


Dipartimenti (DNum, DNome, Sede)

DB
MG DB
MG

Gestione dei vincoli: esempio n.2 (2/3) Gestione dei vincoli: esempio n.2 (3/3)

Impiegati (referenziante) Dipartimenti (referenziata)


insert (nuova tupla) -> No insert (nuova tupla) -> Ok
update (DNum) -> No update (DNum) -> aggiornare in cascata
delete (tupla) -> Ok (cascade)
delete (tupla) -> aggiornare in cascata
(cascade)
impedire l’azione (no action)
impostare a valore ignoto
(set null)
impostare a valore di
default (set default)
DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Politiche di gestione dei vincoli (1/3) Politiche di gestione dei vincoli (2/3)

I vincoli d'integrità sono verificati dopo ogni Operazioni di modifica o cancellazione dalla tabella
istruzione SQL che potrebbe causarne la violazione referenziata causano sulla tabella referenziante:
Non sono ammesse operazioni di inserimento e CASCADE: propagazione dell'operazione di
modifica della tabella referenziante che violino il aggiornamento o cancellazione
vincolo SET NULL/DEFAULT: null o valore di default in tutte
le colonne delle tuple che hanno valori non più
presenti nella tabella referenziata
NO ACTION: non si esegue l'azione invalidante

DB
MG DB
MG

Politiche di gestione dei vincoli (3/3) Base dati di esempio (1/4)

Nell'istruzione CREATE TABLE della tabella DB forniture prodotti


referenziata tabella P: descrive i prodotti disponibili
chiave primaria: CodP
FOREIGN KEY (ElencoAttributiReferenzianti )
nome prodotto non può assumere valori nulli o
REFERENCES duplicati
NomeTabella [(ElencoAttributiReferenziati)] la taglia è sempre maggiore di zero
[ON UPDATE tabella F: descrive i fornitori
<CASCADE | SET DEFAULT | SET NULL | chiave primaria: CodF
NO ACTION>] nome fornitore non può assumere valori nulli o
[ON DELETE duplicati
<CASCADE | SET DEFAULT | SET NULL | numero dei soci è sempre maggiore di zero
NO ACTION>]
DB
MG DB
MG

Base dati di esempio (1/4) Base dati di esempio (2/4)

DB forniture prodotti
tabella FP: descrive le forniture, mettendo in
relazione i prodotti con i fornitori che li forniscono CREATE TABLE P (CodP CHAR(6) PRIMARY KEY,
chiave primaria: (CodF, CodP) NomeP CHAR(20) NOT NULL UNIQUE,
quantità non può assumere il valore null ed è Colore CHAR(6),
maggiore di zero
Taglia SMALLINT
vincoli di integrità referenziale
CHECK (Taglia > 0),
Magazzino CHAR(15));

DB
MG DB
MG

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle tabelle

Base dati di esempio (3/4) Base dati di esempio (4/4)

CREATE TABLE FP (CodF CHAR(5),


CodP CHAR(6),
CREATE TABLE F (CodF CHAR(5) PRIMARY KEY, Qta INTEGER
NomeF CHAR(20) NOT NULL, CHECK (Qta IS NOT NULL and Qta>0),
NSoci SMALLINT PRIMARY KEY (CodF, CodP),
FOREIGN KEY (CodF)
CHECK (NSoci>0),
REFERENCES F(CodF)
Sede CHAR(15));
ON DELETE NO ACTION
ON UPDATE CASCADE,
FOREIGN KEY (CodP)
REFERENCES P(CodP)
ON DELETE NO ACTION
DB
MG DBG
M
ON UPDATE CASCADE);

Elena Baralis
©2007 Politecnico di Torino
Basi di dati Gestione delle viste

Linguaggio SQL: costrutti avanzati

Gestione delle viste


Gestione delle transazioni
SQL per le applicazioni
Controllo dell‟accesso
Gestione degli indici
Sistemi informativi

DB
MG DB
MG
2

Gestione delle viste

Introduzione
Creazione e gestione delle viste in SQL
Aggiornabilità delle viste
Check option
Gestione della privatezza
Linguaggio SQL: costrutti avanzati

DB
MG DB
MG
4

Concetto di vista

La vista è una tabella “virtuale”

Gestione delle viste

DB
MG DB
MG
6

Elena Baralis Pag. 1


©2007 Politecnico di Torino 1
Basi di dati Gestione delle viste

Concetto di vista Concetto di vista

La vista è una tabella “virtuale” La vista è una tabella “virtuale”


il contenuto (tuple) è definito mediante il contenuto (tuple) è definito mediante
un‟interrogazione SQL sulla base di dati un‟interrogazione SQL sulla base di dati
il contenuto della vista dipende dal contenuto delle il contenuto della vista dipende dal contenuto delle
altre tabelle presenti nella base di dati altre tabelle presenti nella base di dati
il contenuto non è memorizzato fisicamente nella
basi di dati
è ricalcolato tutte le volte che si usa la vista
eseguendo l‟interrogazione che la definisce

DB
MG
7 DB
MG
8

Concetto di vista DB forniture prodotti


P FP
La vista è una tabella “virtuale” CodP NomeP Colore Taglia Magazzino CodF CodP Qta
il contenuto (tuple) è definito mediante P1 Maglia Rosso 40 Torino F1 P1 300
un‟interrogazione SQL sulla base di dati P2 Jeans Verde 48 Milano F1 P2 200
P3 Camicia Blu 48 Roma F1 P3 400
il contenuto della vista dipende dal contenuto delle P4 Camicia Blu 44 Torino F1 P4 200
altre tabelle presenti nella base di dati P5 Gonna Blu 40 Milano F1 P5 100
il contenuto non è memorizzato fisicamente nella P6 Bermuda Rosso 42 Torino F1 P6 100
basi di dati F2 P1 300
F F2 P2 400
è ricalcolato tutte le volte che si usa la vista CodF NomeF NSoci Sede F3 P2 200
eseguendo l‟interrogazione che la definisce F1 Andrea 2 Torino F4 P3 200
La vista è un oggetto della base di dati F2 Luca 1 Milano F4 P4 300
F3 Antonio 3 Milano F4 P5 400
è utilizzabile nelle interrogazioni come se fosse una F4 Gabriele 2 Torino
tabella F5 Matteo 3 Venezia
DB
MG
9 DB
MG
10

Esempio n.1 Esempio n.1

Definizione della vista piccoli fornitori Definizione della vista piccoli fornitori
i fornitori che hanno meno di 3 soci sono i fornitori che hanno meno di 3 soci sono
considerati “piccoli fornitori” considerati “piccoli fornitori”
La vista piccoli fornitori
contiene il codice, il nome, il numero di soci e la
sede dei fornitori che hanno meno di 3 soci

DB
MG
11 DB
MG
12

Elena Baralis Pag. 2


©2007 Politecnico di Torino 2
Basi di dati Gestione delle viste

Esempio n.1: definizione della vista Esempio n.1: definizione della vista

Definizione della vista piccoli fornitori Definizione della vista piccoli fornitori
contiene il codice, il nome, il numero di soci e la contiene il codice, il nome, il numero di soci e la
sede dei fornitori che hanno meno di 3 soci sede dei fornitori che hanno meno di 3 soci

SELECT CodF, NomeF, NSoci, Sede SELECT CodF, NomeF, NSoci, Sede
FROM F FROM F
WHERE Nsoci<3 WHERE Nsoci<3

Interrogazione associata alla vista

DB
MG
13 DB
MG
14

Esempio n.1: definizione della vista Esempio n.1: definizione della vista

Definizione della vista piccoli fornitori Definizione della vista piccoli fornitori
contiene il codice, il nome, il numero di soci e la contiene il codice, il nome, il numero di soci e la
sede dei fornitori che hanno meno di 3 soci sede dei fornitori che hanno meno di 3 soci
Nome della vista
CREATE VIEW PICCOLI_FORNITORI AS CREATE VIEW PICCOLI_FORNITORI AS
SELECT CodF, NomeF, NSoci, Sede SELECT CodF, NomeF, NSoci, Sede
FROM F FROM F
WHERE Nsoci<3; WHERE Nsoci<3;

DB
MG
15 DB
MG
16

Esempio n.1: interrogazione Esempio n.1: interrogazione

Visualizzare il codice, il nome, la sede e il numero Visualizzare il codice, il nome, la sede e il numero
di soci dei piccoli fornitori di Torino di soci dei piccoli fornitori di Torino
L‟interrogazione può essere risolta senza l‟uso di
viste
SELECT *
FROM F
WHERE NSoci<3 AND
Sede=„Torino‟;

DB
MG
17 DB
MG
18

Elena Baralis Pag. 3


©2007 Politecnico di Torino 3
Basi di dati Gestione delle viste

Esempio n.1: interrogazione Esempio n.1: interrogazione

Visualizzare il codice, il nome, la sede e il numero Visualizzare il codice, il nome, la sede e il numero
di soci dei piccoli fornitori di Torino di soci dei piccoli fornitori di Torino
L‟interrogazione può essere risolta usando la vista L‟interrogazione può essere risolta usando la vista
definita in precedenza definita in precedenza
SELECT * SELECT *
FROM PICCOLI_FORNITORI FROM PICCOLI_FORNITORI
WHERE Sede=„Torino‟; WHERE Sede=„Torino‟;

La vista PICCOLI_FORNITORI è usata come se


fosse una tabella

DB
MG
19 DB
MG
20

Riscrittura delle interrogazioni Esempio n.1: riscrittura dell’interrogazione

Se l‟interrogazione fa riferimento a una vista, Visualizzare il codice, il nome, la sede e il numero


deve essere riscritta dal DBMS prima di soci dei piccoli fornitori di Torino
dell‟esecuzione SELECT *
La riscrittura è svolta automaticamente FROM PICCOLI_FORNITORI
WHERE Sede=„Torino‟;
si sostituiscono i riferimenti alla vista con la sua
definizione

DB
MG
21 DB
MG
22

Esempio n.1: riscrittura dell’interrogazione Esempio n.1: riscrittura dell’interrogazione

Visualizzare il codice, il nome, la sede e il numero Visualizzare il codice, il nome, la sede e il numero
di soci dei piccoli fornitori di Torino di soci dei piccoli fornitori di Torino
SELECT CodF, NomeF, Sede, NSoci SELECT CodF, NomeF, Sede, NSoci
FROM PICCOLI_FORNITORI FROM PICCOLI_FORNITORI
WHERE Sede=„Torino‟; WHERE Sede=„Torino‟;

Riscrittura della clausola SELECT


si rendono espliciti gli attributi presenti nella
definizione della vista

DB
MG
23 DB
MG
24

Elena Baralis Pag. 4


©2007 Politecnico di Torino 4
Basi di dati Gestione delle viste

Esempio n.1: riscrittura dell’interrogazione Esempio n.1: riscrittura dell’interrogazione

Visualizzare il codice, il nome, la sede e il numero Visualizzare il codice, il nome, la sede e il numero
di soci dei piccoli fornitori di Torino di soci dei piccoli fornitori di Torino
SELECT CodF, NomeF, Sede, NSoci SELECT CodF, NomeF, Sede, NSoci
FROM F FROM F
WHERE NSoci<3 AND WHERE NSoci<3 AND
Sede=„Torino‟; Sede=„Torino‟;
Introduzione della definizione della vista
nella clausola FROM
nella clausola WHERE

DB
MG
25 DB
MG
26

Esempio n.2 Esempio n.2: definizione della vista

Definizione della vista numero di fornitori per Definizione della vista numero di fornitori per
prodotto prodotto
per ogni prodotto, contiene il codice prodotto e il per ogni prodotto, contiene il codice prodotto e il
numero di fornitori diversi che l‟hanno fornito numero di fornitori diversi che l‟hanno fornito

SELECT CodP, COUNT(*)


FROM FP
GROUP BY CodP

DB
MG
27 DB
MG
28

Esempio n.2: definizione della vista Esempio n.2: definizione della vista

Definizione della vista numero di fornitori per Definizione della vista numero di fornitori per
prodotto prodotto
per ogni prodotto, contiene il codice prodotto e il per ogni prodotto, contiene il codice prodotto e il
numero di fornitori diversi che l‟hanno fornito numero di fornitori diversi che l‟hanno fornito

CREATE VIEW NUMFORNITORI_PER_PRODOTTO


(CodP, NumFornitori) AS
SELECT CodP, COUNT(*) SELECT CodP, COUNT(*)
FROM FP FROM FP
GROUP BY CodP GROUP BY CodP;

Interrogazione associata alla vista


DB
MG
29 DB
MG
30

Elena Baralis Pag. 5


©2007 Politecnico di Torino 5
Basi di dati Gestione delle viste

Esempio n.2: definizione della vista Esempio n.2: definizione della vista

Definizione della vista numero di fornitori per Definizione della vista numero di fornitori per
prodotto prodotto
per ogni prodotto, contiene il codice prodotto e il per ogni prodotto, contiene il codice prodotto e il
numero di fornitori diversi che l‟hanno fornito numero di fornitori diversi che l‟hanno fornito
Nome della vista
CREATE VIEW NUMFORNITORI_PER_PRODOTTO CREATE VIEW NUMFORNITORI_PER_PRODOTTO
(CodP, NumFornitori) AS (CodP, NumFornitori) AS
SELECT CodP, COUNT(*) SELECT CodP, COUNT(*)
FROM FP FROM FP Attributi della vista
GROUP BY CodP; GROUP BY CodP;

DB
MG
31 DB
MG
32

Esempio n.2: interrogazione Esempio n.2: interrogazione

Visualizzare il codice dei prodotti forniti dal Visualizzare il codice dei prodotti forniti dal
maggior numero di fornitori maggior numero di fornitori
Senza l‟uso di viste

SELECT CodP
FROM FP
GROUP BY CodP
HAVING COUNT(*)=(SELECT MAX(NumFornitori)
FROM (SELECT COUNT(*) AS NumFornitori
FROM FP
GROUP BY CodP));

DB
MG
33 DB
MG
34

Esempio n.2: interrogazione Considerazioni sugli esempi

Visualizzare il codice dei prodotti forniti dal L‟uso delle viste semplifica la scrittura delle
maggior numero di fornitori interrogazioni
Usando la vista NUMFORNITORI_PER_PRODOTTO

SELECT CodP
FROM NUMFORNITORI_PER_PRODOTTO
WHERE NumFornitori=(SELECT MAX(NumFornitori)
FROM
NUMFORNITORI_PER_PRODOTTO);

DB
MG
35 DB
MG
36

Elena Baralis Pag. 6


©2007 Politecnico di Torino 6
Basi di dati Gestione delle viste

Considerazioni sugli esempi Considerazioni sugli esempi

L‟uso delle viste semplifica la scrittura delle L‟uso delle viste semplifica la scrittura delle
interrogazioni interrogazioni
La vista PICCOLI_FORNITORI nasconde la La vista PICCOLI_FORNITORI nasconde la
definizione del concetto di piccolo fornitore definizione del concetto di piccolo fornitore
è possibile ridefinire il concetto di piccolo fornitore è possibile ridefinire il concetto di piccolo fornitore
cambiando solo la definizione della vista cambiando solo la definizione della vista
non è necessario modificare le interrogazioni che la non è necessario modificare le interrogazioni che la
usano usano
La vista NUMFORNITORI_PER_PRODOTTO
permette di evitare l‟uso di table function

DB
MG
37 DB
MG
38

Vantaggi offerti dalle viste Vantaggi offerti dalle viste

Semplificazione delle interrogazioni Estensione del potere espressivo del linguaggio


espressioni molto complesse possono essere SQL
definite in modo più semplice mediante viste in assenza di table function, alcune tipologie di
scomposizione di un‟interrogazione complessa in interrogazioni possono essere definite solo
sottointerrogazioni associate alle viste mediante l‟uso di viste
utile in presenza di sottointerrogazioni (complesse) in alternativa all‟uso di codice procedurale
ripetute

DB
MG
39 DB
MG
40

Vantaggi offerti dalle viste Vantaggi offerti dalle viste

Gestione della sicurezza Evoluzione della base di dati


è possibile introdurre meccanismi di protezione in caso di ristrutturazione di una base di dati, è
della privatezza diversi per ogni utente o gruppo possibile definire viste che corrispondono a tabelle
la vista diviene l‟elemento a cui sono associate le eliminate
autorizzazioni di accesso la vista sostituisce la tabella presente nella base di
ogni utente, o gruppo, accede alla base di dati solo dati pre-ristrutturazione e ora non più presente
mediante viste appropriate per le operazione che è non si devono riscrivere le interrogazioni scritte prima
abilitato a svolgere della ristrutturazione e presenti nelle applicazioni già
sviluppate

DB
MG
41 DB
MG
42

Elena Baralis Pag. 7


©2007 Politecnico di Torino 7
Basi di dati Gestione delle viste

Creazione di una vista

CREATE VIEW NomeVista [(ElencoAttributi) ]


AS InterrogazioneSQL;

Gestione delle viste

DB
MG DB
MG
44

Creazione di una vista Creazione di una vista

Se i nomi degli attributi della vista non sono Se i nomi degli attributi della vista non sono
specificati specificati
sono utilizzati quelli presenti nella select sono utilizzati quelli presenti nella select
dell‟interrogazione SQL dell‟interrogazione SQL
I nomi degli attributi devono essere specificati se
rappresentano il risultato di una funzione interna
rappresentano il risultato di un‟espressione
sono costanti
due colonne (provenienti da tabelle diverse) hanno
lo stesso nome

DB
MG
45 DB
MG
46

Cancellazione di una vista Effetto della cancellazione di tabelle

DROP VIEW NomeVista; La cancellazione di una tabella a cui fa


riferimento una vista può avere effetti diversi
eliminazione automatica delle viste associate
invalidazione automatica delle viste associate
divieto di esecuzione dell‟operazione di
cancellazione della tabella
L‟effetto dipende dal DBMS utilizzato

DB
MG
47 DB
MG
48

Elena Baralis Pag. 8


©2007 Politecnico di Torino 8
Basi di dati Gestione delle viste

Modifica della definizione di una vista

ALTER VIEW NomeVista [(ElencoAttributi) ]


AS InterrogazioneSQL;

Gestione delle viste

DB
MG
49 DB
MG

Aggiornabilità delle viste Aggiornabilità delle viste

È possibile eseguire operazioni di aggiornamento È possibile eseguire operazioni di aggiornamento


dei dati presenti in una vista solo per alcune dei dati presenti in una vista solo per alcune
tipologie di viste tipologie di viste
Standard SQL-92
sono aggiornabili le viste in cui una sola riga di
ciascuna tabella di base corrisponde a una sola
riga della vista
corrispondenza univoca tra le tuple della vista e le
tuple della tabella su cui è definita
è possibile propagare senza ambiguità le modifiche
apportate sulla vista verso ogni tabella su cui è
definita
DB
MG
51 DB
MG
52

Aggiornabilità delle viste Esempio n.1

Non è aggiornabile una vista che, nel blocco più Vista FORNITORE_SEDE
esterno dell‟interrogazione che la definisce
CREATE VIEW FORNITORE_SEDE AS
non contiene la chiave primaria della tabella su cui SELECT CodF, Sede
è definita FROM F;
contiene join che rappresentano corrispondenze
uno a molti o molti a molti
contiene funzioni aggregate
contiene DISTINCT

DB
MG
53 DB
MG
54

Elena Baralis Pag. 9


©2007 Politecnico di Torino 9
Basi di dati Gestione delle viste

Esempio n.1: inserimento Esempio n.1: cancellazione

Inserimento in FORNITORE_SEDE di Cancellazione da FORNITORE_SEDE di


(„F10‟, „Roma‟) („F1‟, „Torino‟)

corrisponde all‟inserimento in F di cancellazione da F di


(„F10‟,NULL,NULL,„Roma‟) („F1‟, „Andrea‟,2,„Torino‟)
gli attributi NomeF, NSoci devono ammettere il l‟identificazione della tupla da cancellare è
valore NULL permessa dalla chiave primaria

DB
MG
55 DB
MG
56

Esempio n.1: modifica Esempio n.1: aggiornabilità

Modifica in FORNITORE_SEDE di La vista FORNITORE_SEDE è aggiornabile


(„F1‟, „Torino‟) in („F1‟, „Milano‟) ogni tupla della vista corrisponde a una sola tupla
della tabella F
le operazioni di modifica effettuate sulla vista
modifica in F di
possono essere propagate alla tabella su cui è
(„F1‟, „Andrea‟,2,„Torino‟) in („F1‟, „Andrea‟,2,„Milano‟) definita
l‟identificazione della tupla da modificare è
permessa dalla chiave primaria

DB
MG
57 DB
MG
58

Esempio n.2 Esempio n.2: inserimento

Vista NUMSOCI_SEDE Inserimento in NUMSOCI_SEDE di


CREATE VIEW NUMSOCI_SEDE AS (40, „Napoli‟)
SELECT DISTINCT NSoci, Sede
FROM F;
impossibile inserire in F
(NULL,NULL,40,„Napoli‟)
manca il valore della chiave primaria

DB
MG
59 DB
MG
60

Elena Baralis Pag. 10


©2007 Politecnico di Torino 10
Basi di dati Gestione delle viste

Esempio n.2: cancellazione Esempio n.2: modifica

Cancellazione da NUMSOCI_SEDE di Modifica in NUMSOCI_SEDE di


(2, „Torino‟) (2, „Torino‟) in (3, „Milano‟)

più tuple sono associate alla coppia (2, „Torino‟) più tuple sono associate alla coppia (2, „Torino‟)
quale tupla deve essere cancellata da F? quale tupla deve essere modificata in F?

DB
MG
61 DB
MG
62

Esempio n.2: aggiornabilità Esempio n.2: aggiornabilità

La vista NUMSOCI_SEDE non è aggiornabile La vista NUMSOCI_SEDE non è aggiornabile


non è presente la chiave primaria della tabella F
nella vista
l‟inserimento di nuove tuple nella vista non è
propagabile a F

DB
MG
63 DB
MG
64

Esempio n.2: aggiornabilità Aggiornabilità delle viste

La vista NUMSOCI_SEDE non è aggiornabile Alcune viste non aggiornabili possono diventare
non è presente la chiave primaria della tabella F aggiornabili modificando l‟espressione SQL
nella vista associata alla vista
l‟inserimento di nuove tuple nella vista non è può essere necessario ridurre il contenuto
propagabile a F informativo della vista
alcune tuple della vista corrispondono a più tuple
della tabella F
l‟associazione tra tuple nella vista e tuple nella
tabella è ambigua
non è possibile propagare le modifiche effettuate su
tuple della vista alle tuple della tabella su cui è
definita
DB
MG
65 DB
MG
66

Elena Baralis Pag. 11


©2007 Politecnico di Torino 11
Basi di dati Gestione delle viste

Esempio n.3: vista non aggiornabile Esempio n.3: vista non aggiornabile

CREATE VIEW FORNITORI_TORINO AS CREATE VIEW FORNITORI_TORINO AS


SELECT * SELECT *
FROM F FROM F
WHERE Sede=„Torino‟; WHERE Sede=„Torino‟;

La vista non è aggiornabile


non seleziona in modo esplicito la chiave primaria
della tabella F

DB
MG
67 DB
MG
68

Esempio n.3: vista non aggiornabile Esempio n.3: vista modificata

CREATE VIEW FORNITORI_TORINO AS CREATE VIEW FORNITORI_TORINO AS


SELECT * SELECT CodF, NomeF, NSoci, Sede
FROM F FROM F
WHERE Sede=„Torino‟; WHERE Sede=„Torino‟;

La vista non è aggiornabile La vista è aggiornabile


non seleziona in modo esplicito la chiave primaria
della tabella F
È sufficiente sostituire al simbolo “*” il nome
degli attributi
DB
MG
69 DB
MG
70

Esempio n.4: vista non aggiornabile Esempio n.4: vista non aggiornabile

CREATE VIEW FORNITORI_IMPORTANTI (CodF, NomeF) AS CREATE VIEW FORNITORI_IMPORTANTI (CodF, NomeF) AS
SELECT DISTINCT CodF, NomeF SELECT DISTINCT CodF, NomeF
FROM F, FP FROM F, FP
WHERE F.CodF=FP.CodF AND WHERE F.CodF=FP.CodF AND
Qta>100; Qta>100;

La vista non è aggiornabile


è presente un join
è presente la parola chiave DISTINCT

DB
MG
71 DB
MG
72

Elena Baralis Pag. 12


©2007 Politecnico di Torino 12
Basi di dati Gestione delle viste

Esempio n.4: vista modificata Esempio n.4: vista modificata

CREATE VIEW FORNITORI_IMPORTANTI (CodF, NomeF) AS CREATE VIEW FORNITORI_IMPORTANTI (CodF, NomeF) AS
SELECT CodF, NomeF SELECT CodF, NomeF
FROM F FROM F
WHERE CodF IN (SELECT CodF WHERE CodF IN (SELECT CodF
FROM FP FROM FP
WHERE Qta>100); WHERE Qta>100);

DB
MG
73 DB
MG
74

Esempio n.4: vista modificata Esempio n.5: vista non aggiornabile

CREATE VIEW FORNITORI_IMPORTANTI (CodF, NomeF) AS CREATE VIEW FORNITORI_MOLTO_IMPORTANTI (CodF, NomeF,
SELECT CodF, NomeF TotQta) AS
FROM F SELECT CodF, NomeF, SUM(Qta)
WHERE CodF IN (SELECT CodF FROM F, FP
FROM FP WHERE F.CodF=FP.CodF
WHERE Qta>100); GROUP BY CodF, NomeF
HAVING SUM(Qta)>500;
La vista è aggiornabile
il join è stato realizzato mediante IN
la parola chiave DISTINCT non è più necessaria

DB
MG
75 DB
MG
76

Esempio n.5: vista non aggiornabile Esempio n.5: vista modificata

CREATE VIEW FORNITORI_MOLTO_IMPORTANTI (CodF, NomeF, CREATE VIEW FORNITORI_MOLTO_IMPORTANTI (CodF, NomeF)
TotQta) AS AS
SELECT CodF, NomeF, SUM(Qta) SELECT CodF, NomeF
FROM F, FP FROM F
WHERE F.CodF=FP.CodF WHERE CodF IN (SELECT CodF FROM FP
GROUP BY CodF, NomeF GROUP BY CodF, Nome
HAVING SUM(Qta)>500; HAVING SUM(Qta)>500);

La vista non è aggiornabile


è presente una funzione aggregata
è presente un join

DB
MG
77 DB
MG
78

Elena Baralis Pag. 13


©2007 Politecnico di Torino 13
Basi di dati Gestione delle viste

Esempio n.5: vista modificata Esempio n.5: vista modificata

CREATE VIEW FORNITORI_MOLTO_IMPORTANTI (CodF, NomeF) CREATE VIEW FORNITORI_MOLTO_IMPORTANTI (CodF, NomeF)
AS AS
SELECT CodF, NomeF SELECT CodF, NomeF
FROM F FROM F
WHERE CodF IN (SELECT CodF FROM FP WHERE CodF IN (SELECT CodF FROM FP
GROUP BY CodF, Nome GROUP BY CodF, Nome
HAVING SUM(Qta)>500); HAVING SUM(Qta)>500);

La vista è aggiornabile
la group by è stata spostata nell‟interrogazione
nidificata

DB
MG
79 DB
MG
80

Esempio n.5: vista modificata

CREATE VIEW FORNITORI_MOLTO_IMPORTANTI (CodF, NomeF)


AS
SELECT CodF, NomeF
FROM F
WHERE CodF IN (SELECT CodF FROM FP
GROUP BY CodF, Nome
HAVING SUM(Qta)>500);
Gestione delle viste
La vista è aggiornabile
la group by è stata spostata nell‟interrogazione
nidificata
Il contenuto informativo è cambiato
DB
MG
81 DB
MG

Clausola CHECK OPTION Clausola CHECK OPTION

Per le viste aggiornabili può essere utilizzata la Dopo un aggiornamento le tuple devono ancora
clausola WITH CHECK OPTION appartenere alla vista
limita gli aggiornamenti possibili diversamente l‟operazione è vietata

CREATE VIEW NomeVista [(ElencoAttributi) ]


AS InterrogazioneSQL
[WITH [LOCAL|CASCADED] CHECK OPTION];

DB
MG
83 DB
MG
84

Elena Baralis Pag. 14


©2007 Politecnico di Torino 14
Basi di dati Gestione delle viste

Clausola CHECK OPTION Esempio n.1

Dopo un aggiornamento le tuple devono ancora CREATE VIEW PRODOTTI_TAGLIA_MEDIA_O_GRANDE(CodP,


appartenere alla vista NomeP, Taglia) AS
SELECT CodP, NomeP, Taglia
diversamente l‟operazione è vietata FROM P
Permette di inserire una nuova tupla nella vista WHERE Taglia>=42
se e solo se la tupla soddisfa i vincoli presenti WITH CHECK OPTION;
nella definizione della vista
diversamente l‟operazione è vietata
La vista è aggiornabile
non si possono aggiornare le tuple presenti nella
vista con valori di taglia minori di 42

DB
MG
85 DB
MG
86

Esempio n.1 Esempio n.1

Contenuto della vista Contenuto della vista


PRODOTTI_TAGLIA_MEDIA_O_GRANDE PRODOTTI_TAGLIA_MEDIA_O_GRANDE
CodP NomeP Taglia CodP NomeP Taglia
P2 Jeans 48 P2 Jeans 48
P3 Camicia 48 P3 Camicia 48
P4 Camicia 44 P4 Camicia 44
P6 Bermuda 42 P6 Bermuda 42

Operazione di aggiornamento
UPDATE PRODOTTI_TAGLIA_MEDIA_O_GRANDE
SET Taglia=Taglia-2;

DB
MG
87 DB
MG
88

Esempio n.1 Esempio n.1

Contenuto della vista Contenuto della vista


PRODOTTI_TAGLIA_MEDIA_O_GRANDE PRODOTTI_TAGLIA_MEDIA_O_GRANDE
CodP NomeP Taglia CodP NomeP Taglia
P2 Jeans 48 46 P2 Jeans 48 46
P3 Camicia 48 46 P3 Camicia 48 46
P4 Camicia 44 42 P4 Camicia 44 42
P6 Bermuda 42 40 P6 Bermuda 42 40

Esce dalla definizione della vista


Operazione di aggiornamento Operazione di aggiornamento
UPDATE PRODOTTI_TAGLIA_MEDIA_O_GRANDE UPDATE PRODOTTI_TAGLIA_MEDIA_O_GRANDE
SET Taglia=Taglia-2; SET Taglia=Taglia-2;

DB
MG
89 DB
MG
90

Elena Baralis Pag. 15


©2007 Politecnico di Torino 15
Basi di dati Gestione delle viste

Esempio n.1 Clausola CHECK OPTION

Contenuto della vista CREATE VIEW NomeVista [(ElencoAttributi) ]


PRODOTTI_TAGLIA_MEDIA_O_GRANDE AS InterrogazioneSQL
[WITH [LOCAL|CASCADED] CHECK OPTION];
CodP NomeP Taglia
P2 Jeans 48 46
P3 Camicia 48 46 Quando una vista è definita in termini di altre viste
P4 Camicia 44 42
P6 Bermuda 42 40

Esce dalla definizione della vista


Operazione di aggiornamento
UPDATE PRODOTTI_TAGLIA_MEDIA_O_GRANDE
SET Taglia=Taglia-2;

DB
MGAggiornamento vietato
91 DB
MG
92

Clausola CHECK OPTION Clausola CHECK OPTION

CREATE VIEW NomeVista [(ElencoAttributi) ] CREATE VIEW NomeVista [(ElencoAttributi) ]


AS InterrogazioneSQL AS InterrogazioneSQL
[WITH [LOCAL|CASCADED] CHECK OPTION]; [WITH [LOCAL|CASCADED] CHECK OPTION];

Quando una vista è definita in termini di altre viste Quando una vista è definita in termini di altre viste
se si specifica LOCAL se si specifica LOCAL
la correttezza dell‟aggiornamento è verificata solo la correttezza dell‟aggiornamento è verificata solo
sulla vista più esterna sulla vista più esterna
se si specifica CASCADED
la correttezza dell‟aggiornamento è verificata su tutte
le viste coinvolte dall‟aggiornamento
opzione di default
DB
MG
93 DB
MG
94

Esempio n.2 Esempio n.2

CREATE VIEW PRODOTTI_TAGLIA_MEDIA(CodP, NomeP, CREATE VIEW PRODOTTI_TAGLIA_MEDIA(CodP, NomeP,


Taglia) AS Taglia) AS
SELECT CodP, NomeP, Taglia SELECT CodP, NomeP, Taglia
FROM PRODOTTI_TAGLIA_MEDIA_O_GRANDE FROM PRODOTTI_TAGLIA_MEDIA_O_GRANDE
WHERE Taglia<=46 WHERE Taglia<=46
WITH CASCADED CHECK OPTION; WITH CASCADED CHECK OPTION;

Posso aggiornare il contenuto della vista


PRODOTTI_TAGLIA_MEDIA solo usando taglie
comprese tra 42 e 46
Comportamento di default

DB
MG
95 DB
MG
96

Elena Baralis Pag. 16


©2007 Politecnico di Torino 16
Basi di dati Gestione delle viste

Esempio n.2 Esempio n.2

Contenuto della vista PRODOTTI_TAGLIA_MEDIA Contenuto della vista PRODOTTI_TAGLIA_MEDIA


CodP NomeP Taglia CodP NomeP Taglia
P4 Camicia 44 P4 Camicia 44
P6 Bermuda 42 P6 Bermuda 42

Operazione di aggiornamento
UPDATE PRODOTTI_TAGLIA_MEDIA
SET Taglia=Taglia-2;

DB
MG
97 DB
MG
98

Esempio n.2 Esempio n.2

Contenuto della vista PRODOTTI_TAGLIA_MEDIA Contenuto della vista PRODOTTI_TAGLIA_MEDIA


CodP NomeP Taglia CodP NomeP Taglia
P4 Camicia 44 42 P4 Camicia 44 42
P6 Bermuda 42 40 P6 Bermuda 42 40
Esce dalla definizione della vista PRODOTTI_TAGLIA_MEDIA_O_GRANDE
Operazione di aggiornamento Operazione di aggiornamento
UPDATE PRODOTTI_TAGLIA_MEDIA UPDATE PRODOTTI_TAGLIA_MEDIA
SET Taglia=Taglia-2; SET Taglia=Taglia-2;
CREATE VIEW PRODOTTI_TAGLIA_MEDIA_O_GRANDE
(CodP, NomeP, Taglia) AS
SELECT CodP, NomeP, Taglia
FROM P
WHERE Taglia>=42
DB
MG
99 DB G
M WITH CHECK OPTION;
100

Esempio n.2 Esempio n.3

Contenuto della vista PRODOTTI_TAGLIA_MEDIA CREATE VIEW PRODOTTI_TAGLIA_MEDIA(CodP, NomeP,


CodP NomeP Taglia Taglia) AS
P4 Camicia 44 42 SELECT CodP, NomeP, Taglia
P6 Bermuda 42 40 FROM PRODOTTI_TAGLIA_MEDIA_O_GRANDE
Esce dalla definizione della vista PRODOTTI_TAGLIA_MEDIA_O_GRANDE WHERE Taglia<=46
WITH LOCAL CHECK OPTION;
Operazione di aggiornamento
UPDATE PRODOTTI_TAGLIA_MEDIA Il controllo è effettuato solo sulla vista
SET Taglia=Taglia-2;
PRODOTTI_TAGLIA_MEDIA
Con CASCADED CHECK OPTION
aggiornamento vietato a causa di
PRODOTTI_TAGLIA_MEDIA_O_GRANDE
DB
MG
101 DB
MG
102

Elena Baralis Pag. 17


©2007 Politecnico di Torino 17
Basi di dati Gestione delle viste

Esempio n.3 Esempio n.3

CREATE VIEW PRODOTTI_TAGLIA_MEDIA(CodP, NomeP, Contenuto della vista PRODOTTI_TAGLIA_MEDIA


Taglia) AS CodP NomeP Taglia
SELECT CodP, NomeP, Taglia P4 Camicia 44
FROM PRODOTTI_TAGLIA_MEDIA_O_GRANDE P6 Bermuda 42
WHERE Taglia<=46
WITH LOCAL CHECK OPTION;
Operazione di aggiornamento
Il controllo è effettuato solo sulla vista UPDATE PRODOTTI_TAGLIA_MEDIA
SET Taglia=Taglia-2;
PRODOTTI_TAGLIA_MEDIA
si può aggiornare con taglie minori o uguali a 46

DB
MG
103 DB
MG
104

Esempio n.3 Esempio n.3

Contenuto della vista PRODOTTI_TAGLIA_MEDIA Contenuto della vista PRODOTTI_TAGLIA_MEDIA


CodP NomeP Taglia CodP NomeP Taglia
P4 Camicia 44 42 P4 Camicia 44 42
P6 Bermuda 42 40 P6 Bermuda 42 40

Operazione di aggiornamento Operazione di aggiornamento


UPDATE PRODOTTI_TAGLIA_MEDIA UPDATE PRODOTTI_TAGLIA_MEDIA
SET Taglia=Taglia-2; SET Taglia=Taglia-2;
CREATE VIEW PRODOTTI_TAGLIA_MEDIA
(CodP, NomeP, Taglia) AS
SELECT CodP, NomeP, Taglia
FROM PRODOTTI_TAGLIA_MEDIA_O_GRANDE
WHERE Taglia<=46
DB
MG
105 DB G
M WITH LOCAL CHECK OPTION;
106

Esempio n.3

Contenuto della vista PRODOTTI_TAGLIA_MEDIA


CodP NomeP Taglia
P4 Camicia 44 42
P6 Bermuda 42 40

Operazione di aggiornamento
UPDATE PRODOTTI_TAGLIA_MEDIA Gestione delle viste
SET Taglia=Taglia-2;

Con LOCAL CHECK OPTION


aggiornamento consentito

DB
MG
107 DB
MG

Elena Baralis Pag. 18


©2007 Politecnico di Torino 18
Basi di dati Gestione delle viste

Viste e gestione della privatezza Viste e gestione della privatezza

Le viste permettono di individuare sottoinsiemi di Le viste permettono di individuare sottoinsiemi di


dati dati
individuati da un‟espressione SELECT individuati da un‟espressione SELECT
Assegnando a un utente l‟accesso a specifiche
viste si limitano
la sua visibilità sulle tabelle esistenti
le operazioni che può eseguire

DB
MG
109 DB
MG
110

Esempio n.1 Esempio n.1

CREATE VIEW FORNITORI_TORINO(CodF, NomeF, NSoci) AS CREATE VIEW FORNITORI_TORINO(CodF, NomeF, NSoci) AS
SELECT CodF, NomeF, Nsoci SELECT CodF, NomeF, Nsoci
FROM F FROM F
WHERE Sede=„Torino‟ WHERE Sede=„Torino‟
WITH CHECK OPTION; WITH CHECK OPTION;

La vista FORNITORI_TORINO seleziona solo i dati


dei fornitori di Torino

DB
MG
111 DB
MG
112

Esempio n.1 Esempio n.2

CREATE VIEW FORNITORI_TORINO(CodF, NomeF, NSoci) AS CREATE VIEW CODICE_NOME_FORNITORI(CodF, NomeF) AS


SELECT CodF, NomeF, Nsoci SELECT CodF, NomeF
FROM F FROM F;
WHERE Sede=„Torino‟
WITH CHECK OPTION;

La vista FORNITORI_TORINO seleziona solo i dati


dei fornitori di Torino
Un utente che ha accesso solo a questa vista
non può accedere alla tabella F
non può operare sui fornitori con sede diversa da
Torino

DB
MG
113 DB
MG
114

Elena Baralis Pag. 19


©2007 Politecnico di Torino 19
Basi di dati Gestione delle viste

Esempio n.2 Esempio n.2

CREATE VIEW CODICE_NOME_FORNITORI(CodF, NomeF) AS CREATE VIEW CODICE_NOME_FORNITORI(CodF, NomeF) AS


SELECT CodF, NomeF SELECT CodF, NomeF
FROM F; FROM F;

La vista CODICE_NOME_FORNITORI seleziona La vista CODICE_NOME_FORNITORI seleziona


solo il codice e il nome dei fornitori solo il codice e il nome dei fornitori
Un utente che ha accesso solo a questa vista
non può accedere alla tabella F
non può operare sugli attributi NSoci e Sede

DB
MG
115 DB
MG
116

Dizionario dei dati Dizionario dei dati

Il dizionario dei dati contiene i metadati di una Il dizionario dei dati contiene i metadati di una
base di dati relazionale base di dati relazionale
i metadati sono informazioni (dati) sui dati i metadati sono informazioni (dati) sui dati
descrivono gli oggetti della base di dati (tabelle, descrivono gli oggetti della base di dati (tabelle,
viste, …) viste, …)
Nel dizionario dei dati sono definite viste che
limitano la visibilità dei singoli utenti sui metadati
del dizionario
ogni utente può vedere solo le informazioni
relative a oggetti della base di dati definiti da se
stesso
DB
MG
117 DB
MG
118

Esempio: Oracle

Il DBMS Oracle rende disponibili numerose viste


che descrivono i dati creati da un utente
USER_TABLES contiene metadati relativi alle
tabelle dell‟utente
USER_TAB_STATISTICS contiene le statistiche
calcolate sulle tabelle dell‟utente
USER_TAB_COL_STATISTICS contiene le
statistiche calcolate sulle colonne delle tabelle
dell‟utente

DB
MG
119

Elena Baralis Pag. 20


©2007 Politecnico di Torino 20
Basi di dati Gestione delle transazioni

Gestione delle transazioni

Introduzione
Transazioni in SQL
Proprietà delle transazioni

Linguaggio SQL: costrutti avanzati

DB
MG DB
MG
2

Esempio applicativo

Operazioni bancarie
operazione di prelievo dal
proprio conto corrente
mediante bancomat

Gestione delle transazioni

DB
MG DB
MG
4

Esempio applicativo Prelievo

Operazioni bancarie Operazioni svolte


operazione di prelievo dal specificare l’importo richiesto
proprio conto corrente verificare la disponibilità
mediante bancomat memorizzare il movimento
operazione di versamento di aggiornare il saldo
denaro contante sul proprio abilitare l’erogazione della
conto corrente somma richiesta

DB
MG
5 DB
MG
6

Elena Baralis Pag. 1


©2007 Politecnico di Torino 1
Basi di dati Gestione delle transazioni

Prelievo Prelievo

Operazioni svolte Cosa succede se un cointestatario diverso del


specificare l’importo richiesto conto fa un altro prelievo?
verificare la disponibilità
memorizzare il movimento
aggiornare il saldo
abilitare l’erogazione della
somma richiesta
Tutte le operazioni devono essere eseguite
correttamente, altrimenti il prelievo non va a
buon fine

DB
MG
7 DB
MG
8

Prelievo Versamento

Cosa succede se un cointestatario diverso del Operazioni svolte


conto fa un altro prelievo? verificare l’importo versato
Cosa succede in caso di malfunzionamento? memorizzare il movimento
aggiornare il saldo

Tutte le operazioni devono essere eseguite


correttamente, altrimenti il versamento non
va a buon fine

DB
MG
9 DB
MG
10

Versamento Versamento

Cosa succede se un’altra persona fa un Cosa succede se un’altra persona fa un


versamento sullo stesso conto? versamento sullo stesso conto?
Cosa succede in caso di malfunzionamento?

DB
MG
11 DB
MG
12

Elena Baralis Pag. 2


©2007 Politecnico di Torino 2
Basi di dati Gestione delle transazioni

Esempio: operazioni bancarie Esempio: operazioni bancarie

La base di dati bancaria è un ambiente multiutente La base di dati bancaria è un ambiente multiutente
diversi operatori possono operare diversi operatori possono operare
contemporaneamente sulla stessa porzione di dati contemporaneamente sulla stessa porzione di dati
La gestione corretta delle informazioni richiede
meccanismi per la gestione dell’accesso concorrente
alla base di dati

DB
MG
13 DB
MG
14

Esempio: operazioni bancarie Gestione delle transazioni

La base di dati bancaria è un ambiente multiutente Necessaria quando più utenti possono accedere
diversi operatori possono operare contemporaneamente ai dati
contemporaneamente sulla stessa porzione di dati Offre meccanismi efficienti per
La gestione corretta delle informazioni richiede gestire l’accesso concorrente ai dati
meccanismi per la gestione dell’accesso concorrente effettuare il recovery a seguito di un
alla base di dati malfunzionamento
meccanismi per il ripristino (recovery) dello stato
corretto della base di dati in caso di guasti

DB
MG
15 DB
MG
16

Transazione Sistema transazionale

Una transazione è una sequenza di operazioni che Un sistema che mette a disposizione un
rappresenta un’unità elementare di lavoro meccanismo per la definizione e l’esecuzione di
può concludersi con un successo o un insuccesso transazioni viene detto sistema transazionale
in caso di successo, il risultato delle operazioni I DBMS contengono blocchi architetturali che
eseguite deve essere memorizzato in modo offrono servizi di gestione delle transazioni
permanente nella base di dati
in caso di insuccesso, la base di dati deve ritornare
allo stato precedente l’inizio della transazione

DB
MG
17 DB
MG
18

Elena Baralis Pag. 3


©2007 Politecnico di Torino 3
Basi di dati Gestione delle transazioni

Transazione

Una transazione è
un’unità logica di lavoro, non ulteriormente
scomponibile
una sequenza di operazioni (istruzioni SQL) di
modifica dei dati, che porta la base di dati da uno
stato consistente a un altro stato consistente
Gestione delle transazioni non è necessario conservare la consistenza negli stati
intermedi

DB
MG DB
MG
20

Inizio di una transazione Inizio di una transazione

Per definire l’inizio di una transazione, il linguaggio Per definire l’inizio di una transazione, il linguaggio
SQL prevede l’istruzione SQL prevede l’istruzione
START TRANSACTION START TRANSACTION
Di solito l’istruzione di inizio della transazione è
omessa
l’inizio è implicito
prima istruzione SQL del programma che accede alla
base di dati
prima istruzione SQL successiva all’istruzione di
termine della transazione precedente

DB
MG
21 DB
MG
22

Fine di una transazione Fine di una transazione

Il linguaggio SQL prevede istruzioni per definire la Il linguaggio SQL prevede istruzioni per definire la
fine di una transazione fine di una transazione
Transazione terminata con successo Transazione terminata con successo
COMMIT [WORK] COMMIT [WORK]
l’azione associata all’istruzione si chiama commit l’azione associata all’istruzione si chiama commit
Transazione terminata con insuccesso
ROLLBACK [WORK]
l’azione associata all’istruzione si chiama abort

DB
MG
23 DB
MG
24

Elena Baralis Pag. 4


©2007 Politecnico di Torino 4
Basi di dati Gestione delle transazioni

Commit Commit

Azione eseguita quando una transazione termina Azione eseguita quando una transazione termina
con successo con successo
La base di dati è in un nuovo stato (finale) corretto
Le modifiche dei dati effettuate dalla transazione
divengono
permanenti
visibili agli altri utenti

DB
MG
25 DB
MG
26

Rollback Rollback

Azione eseguita quando una transazione termina a Azione eseguita quando una transazione termina a
causa di un errore causa di un errore
per esempio, di un errore applicativo per esempio, di un errore applicativo
Tutte le operazioni di modifica dei dati eseguite
durante la transazione sono “annullate”
La base di dati ritorna nello stato precedente
l’inizio della transazione
i dati sono nuovamente visibili agli altri utenti

DB
MG
27 DB
MG
28

Esempio Esempio

Trasferire la somma 100 Trasferire la somma 100


dal conto corrente bancario dal conto corrente bancario
IT92X0108201004300000322229 IT92X0108201004300000322229
al conto corrente bancario al conto corrente bancario
IT32L0201601002410000278976 IT32L0201601002410000278976
START TRANSACTION;

DB
MG
29 DB
MG
30

Elena Baralis Pag. 5


©2007 Politecnico di Torino 5
Basi di dati Gestione delle transazioni

Esempio Esempio

Trasferire la somma 100 Trasferire la somma 100


dal conto corrente bancario dal conto corrente bancario
IT92X0108201004300000322229 IT92X0108201004300000322229
al conto corrente bancario al conto corrente bancario
IT32L0201601002410000278976 IT32L0201601002410000278976
START TRANSACTION; START TRANSACTION;
UPDATE Conto-Corrente UPDATE Conto-Corrente
SET Saldo = Saldo + 100 SET Saldo = Saldo + 100
WHERE IBAN='IT92X0108201004300000322229'; WHERE IBAN='IT92X0108201004300000322229';
UPDATE Conto-Corrente
SET Saldo = Saldo - 100
WHERE IBAN= 'IT32L0201601002410000278976';

DB
MG
31 DB
MG
32

Esempio

Trasferire la somma 100


dal conto corrente bancario
IT92X0108201004300000322229
al conto corrente bancario
IT32L0201601002410000278976
START TRANSACTION;
UPDATE Conto-Corrente Gestione delle transazioni
SET Saldo = Saldo + 100
WHERE IBAN='IT92X0108201004300000322229';
UPDATE Conto-Corrente
SET Saldo = Saldo - 100
WHERE IBAN= 'IT32L0201601002410000278976';
COMMIT;
DB
MG
33 DB
MG

Proprietà delle transazioni Proprietà delle transazioni

Le proprietà principali delle transazioni sono Le proprietà principali delle transazioni sono
Atomicity – atomicità Atomicity – atomicità
Consistency – consistenza

DB
MG
35 DB
MG
36

Elena Baralis Pag. 6


©2007 Politecnico di Torino 6
Basi di dati Gestione delle transazioni

Proprietà delle transazioni Proprietà delle transazioni

Le proprietà principali delle transazioni sono Le proprietà principali delle transazioni sono
Atomicity – atomicità Atomicity – atomicità
Consistency – consistenza Consistency – consistenza
Isolation – isolamento Isolation – isolamento
Durability – persistenza (o durabilità)

DB
MG
37 DB
MG
38

Proprietà delle transazioni Atomicità

Le proprietà principali delle transazioni sono Una transazione è un’unità indivisibile (atomo) di
Atomicity – atomicità lavoro
Consistency – consistenza devono essere eseguite tutte le operazioni
Isolation – isolamento contenute nella transazione
Durability – persistenza (o durabilità) oppure nessuna delle operazioni contenute nella
transazione deve essere eseguita
Sono riassunte dall’acronimo (inglese) ACID
la transazione non ha nessun effetto sulla base di dati

DB
MG
39 DB
MG
40

Atomicità Consistenza

Una transazione è un’unità indivisibile (atomo) di L’esecuzione di una transazione deve portare la
lavoro base di dati
devono essere eseguite tutte le operazioni da uno stato iniziale consistente (corretto)
contenute nella transazione a uno stato finale consistente
oppure nessuna delle operazioni contenute nella
transazione deve essere eseguita
la transazione non ha nessun effetto sulla base di dati
La base di dati non può rimanere in uno stato
intermedio assunto durante l’esecuzione di una
transazione

DB
MG
41 DB
MG
42

Elena Baralis Pag. 7


©2007 Politecnico di Torino 7
Basi di dati Gestione delle transazioni

Consistenza Consistenza

L’esecuzione di una transazione deve portare la L’esecuzione di una transazione deve portare la
base di dati base di dati
da uno stato iniziale consistente (corretto) da uno stato iniziale consistente (corretto)
a uno stato finale consistente a uno stato finale consistente
La correttezza è verificata dai vincoli di integrità La correttezza è verificata dai vincoli di integrità
definiti sulla base di dati definiti sulla base di dati
Quando si verifica la violazione di un vincolo di
integrità il sistema interviene
per annullare la transazione
oppure, per modificare lo stato della base di dati
eliminando la violazione del vincolo
DB
MG
43 DB
MG
44

Isolamento Isolamento

L’esecuzione di una transazione è indipendente L’esecuzione di una transazione è indipendente


dalla contemporanea esecuzione di altre dalla contemporanea esecuzione di altre
transazioni transazioni
Gli effetti di una transazione non sono visibili dalle
altre transazioni fino a quando la transazione non
è terminata
si evita la visibilità di stati intermedi non stabili
uno stato intermedio può essere annullato da un
rollback successivo
in caso di rollback, è necessario effettuare rollback
delle altre transazioni che hanno osservato lo stato
intermedio (effetto domino)
DB
MG
45 DB
MG
46

Persistenza Persistenza

L’effetto di una transazione che ha effettuato il L’effetto di una transazione che ha effettuato il
commit è memorizzato in modo permanente commit è memorizzato in modo permanente
le modifiche dei dati eseguite da una transazione le modifiche dei dati eseguite da una transazione
terminata con successo sono permanenti dopo il terminata con successo sono permanenti dopo il
commit commit
Garantisce l’affidabilità delle operazioni di modifica
dei dati
i DBMS offrono meccanismi di ripristino dello stato
corretto della base di dati dopo che si è verificato un
guasto

DB
MG
47 DB
MG
48

Elena Baralis Pag. 8


©2007 Politecnico di Torino 8
Basi di dati SQL per le applicazioni

SQL per le applicazioni

Introduzione
Concetto di cursore
Aggiornabilità
SQL statico e dinamico
Embedded SQL
Linguaggio SQL: costrutti avanzati Call Level Interface (CLI)
Stored Procedure
Confronto tra le alternative

DB
MG DB
MG
2

Esempio applicativo

Operazioni bancarie
operazione di prelievo dal
proprio conto corrente
mediante bancomat
operazione di prelievo dal
proprio conto corrente
SQL per le applicazioni presso uno sportello
bancario

DB
MG DB
MG
4

Prelievo mediante bancomat Prelievo mediante bancomat

Operazioni svolte Per svolgere molte delle


verificare la validità del operazioni indicate è
bancomat e del codice PIN necessario accedere alla base
selezionare l’operazione di di dati
prelievo esecuzione di istruzioni SQL
specificare l’importo richiesto Le operazioni devono essere
verificare la disponibilità svolte nell’ordine corretto
memorizzare il movimento
aggiornare il saldo
erogare la somma richiesta

DB
MG
5
DB
MG
6

Elena Baralis
©2007 Politecnico di Torino 1
Basi di dati SQL per le applicazioni

Prelievo presso uno sportello bancario Prelievo presso uno sportello bancario

Operazioni svolte Per svolgere molte delle


verificare l’identità dell’utente operazioni indicate è
comunicare l’intenzione di necessario accedere alla base
effettuare un prelievo di dati
verificare la disponibilità esecuzione di istruzioni SQL
memorizzare il movimento Le operazioni devono essere
aggiornare il saldo svolte nell’ordine corretto
erogare la somma richiesta

DB
MG
7
DB
MG
8

Esempio: operazioni bancarie Applicazioni e SQL

Le operazioni bancarie richiedono di accedere alla Per risolvere problemi reali non è quasi mai
base di dati e di modificarne il contenuto sufficiente eseguire singole istruzioni SQL
esecuzione di istruzioni SQL Servono applicazioni per
i clienti e il personale della banca non eseguono acquisire e gestire i dati forniti in ingresso
direttamente le istruzioni SQL
scelte dell’utente, parametri
un’applicazione nasconde l’esecuzione delle
gestire la logica applicativa
istruzioni SQL
flusso di operazioni da eseguire
La corretta gestione delle operazioni bancarie restituire i risultati all’utente in formati diversi
richiede di eseguire una sequenza precisa di passi rappresentazione non relazionale dei dati
un’applicazione permette di specificare l’ordine documento XML
corretto di esecuzione delle operazioni visualizzazione complessa delle informazioni
grafici, report
DB
MG
9
DB
MG
10

Integrazione tra SQL e applicazioni Integrazione tra SQL e applicazioni

Le applicazioni sono scritte in linguaggi di È necessario integrare il linguaggio SQL e i


programmazione tradizionali di alto livello linguaggi di programmazione
C, C++, Java, C#, ... SQL
il linguaggio è denominato linguaggio ospite linguaggio dichiarativo
Le istruzioni SQL sono usate nelle applicazioni per linguaggi di programmazione
accedere alla base di dati tipicamente procedurali
interrogazioni
aggiornamenti

DB
MG
11
DB
MG
12

Elena Baralis
©2007 Politecnico di Torino 2
Basi di dati SQL per le applicazioni

Conflitto di impedenza SQL e linguaggi di programmazione

Conflitto di impedenza Tecniche principali di integrazione


le interrogazioni SQL operano su una o più tabelle Embedded SQL
e producono come risultato una tabella Call Level Interface (CLI)
approccio set oriented SQL/CLI, ODBC, JDBC, OLE DB, ADO.NET, ..
i linguaggi di programmazione accedono alle righe Stored procedure
di una tabella leggendole una a una
Classificabili in
approccio tuple oriented
client side
Soluzioni possibili per risolvere il conflitto embedded SQL, call level interface
uso di cursori server side
uso di linguaggi che dispongono in modo naturale stored procedure
di strutture di tipo “insieme di righe”

DB
MG
13
DB
MG
14

Approccio client side Approccio server side

L’applicazione L’applicazione (o una parte di essa)


è esterna al DBMS si trova nel DBMS
contiene tutta la logica applicativa tutta o parte della logica applicativa si sposta nel
richiede al DBMS di eseguire istruzioni SQL e di DBMS
restituirne il risultato
elabora i dati restituiti

DB
MG
15
DB
MG
16

Approccio client side vs server side

Approccio client side


maggiore indipendenza dal DBMS utilizzato
minore efficienza
Approccio server side
dipendente dal DBMS utilizzato
maggiore efficienza SQL per le applicazioni

DB
MG
17
DB
MG

Elena Baralis
©2007 Politecnico di Torino 3
Basi di dati SQL per le applicazioni

Conflitto di impedenza Cursori

Principale problema di integrazione tra SQL e Se un’istruzione SQL restituisce una sola riga
linguaggi di programmazione è sufficiente specificare in quale variabile del
le interrogazioni SQL operano su una o più tabelle linguaggio ospite memorizzare il risultato
e producono come risultato una tabella dell’istruzione
approccio set oriented Se un’istruzione SQL restituisce una tabella
i linguaggi di programmazione accedono alle righe (insieme di tuple)
di una tabella leggendole una a una è necessario un metodo per leggere (e passare al
approccio tuple oriented programma) una tupla alla volta dal risultato
dell’interrogazione
uso di un cursore

DB
MG
19
DB
MG
20

DB forniture prodotti Esempio n.1


P FP
CodP NomeP Colore Taglia Magazzino CodF CodP Qta Visualizzare nome e numero di soci del fornitore
P1 Maglia Rosso 40 Torino F1 P1 300 con codice F1
P2 Jeans Verde 48 Milano F1 P2 200
P3 Camicia Blu 48 Roma
SELECT NomeF, NSoci
F1 P3 400
P4 Camicia Blu 44 Torino F1 P4 200
FROM F
P5 Gonna Blu 40 Milano F1 P5 100 WHERE CodF=‘F1’;
P6 Bermuda Rosso 42 Torino F1 P6 100
F2 P1 300 L’interrogazione restituisce al massimo una tupla
F F2 P2 400
CodF NomeF NSoci Sede F3 P2 200 NomeF NSoci
F1 Andrea 2 Torino F4 P3 200 Andrea 2
F2 Luca 1 Milano F4 P4 300
F3 Antonio 3 Milano F4 P5 400 È sufficiente specificare in quali variabili del
F4 Gabriele 2 Torino linguaggio ospite memorizzare la tupla selezionata
F5 Matteo 3 Venezia
DB
MG
21
DB
MG
22

Esempio n.2 Esempio n.2

Visualizzare nome e numero di soci dei fornitori di Definizione del cursone mediante la sintassi del
Torino linguaggio PL/SQL di Oracle
SELECT NomeF, NSoci CURSOR FornitoriTorino IS
FROM F SELECT NomeF, NSoci
WHERE Sede=‘Torino’; FROM F
WHERE Sede=‘Torino’;
L’interrogazione restituisce un insieme di tuple
NomeF NSoci
Andrea 2 Cursore
Gabriele 2

È necessario definire un cursore per leggere


DB separatamente le tuple del risultato 23
DB 24
MG MG

Elena Baralis
©2007 Politecnico di Torino 4
Basi di dati SQL per le applicazioni

Cursore Cursore

Il cursore permette di leggere singolarmente le Non necessitano di cursori


tuple che fanno parte del risultato di le interrogazione SQL che restituiscono al massimo
un’interrogazione una tupla
deve essere associato a un’interrogazione specifica selezioni sulla chiave primaria
Ogni interrogazione SQL che può restituire un operazioni di aggregazione senza clausola GROUP
BY
insieme di tuple deve essere associata a un
i comandi di aggiornamento e di DDL
cursore
non generano tuple come risultato

DB
MG
25
DB
MG
26

Aggiornabilità

È possibile aggiornare o cancellare la tupla


corrente puntata dal cursore
più efficiente rispetto all’esecuzione di un’istruzione
SQL separata di aggiornamento
L’aggiornamento di una tupla tramite cursore è
possibile solo se è aggiornabile la vista che
SQL per le applicazioni
corrisponderebbe all’interrogazione associata
deve esistere una corrispondenza uno a uno tra la
tupla puntata dal cursore e la tupla da aggiornare
nella tabella della base di dati

DB
MG DB
MG
28

Esempio: cursore non aggiornabile Esempio: cursore aggiornabile

Si supponga l’esistenza del cursore DatiFornitori Si supponga di associare al cursore DatiFornitori


associato all’interrogazione la seguente interrogazione
SELECT DISTINCT CodF, NomeF, NSoci SELECT CodF, NomeF, NSoci
FROM F, FP, P FROM F
WHERE F.CodF=FP.CodF WHERE CodF IN (SELECT CodF
AND P.CodP=FP.CodP FROM FP, P
AND Colore=‘Rosso’; WHERE FP.CodP=P.CodP
AND Colore=‘Rosso’);
Il cursore DatiFornitori non è aggiornabile
Scrivendo in modo diverso l’interrogazione, il Le due interrogazioni sono equivalenti
cursore può diventare aggiornabile il risultato della nuova interrogazione è identico
Il cursore DatiFornitori è aggiornabile
DB
MG
29
DB
MG
30

Elena Baralis
©2007 Politecnico di Torino 5
Basi di dati SQL per le applicazioni

SQL statico

Le istruzioni SQL da eseguire sono note durante


la scrittura dell’applicazione
è nota la definizione di ogni istruzione SQL
le istruzioni possono contenere variabili
il valore delle variabili è noto solo durante
l’esecuzione dell’istruzione SQL
SQL per le applicazioni

DB
MG DB
MG
32

SQL statico SQL dinamico

La definizione delle istruzioni SQL avviene Le istruzioni SQL da eseguire non sono note
durante la scrittura dell’applicazione durante la scrittura dell’applicazione
semplifica la scrittura dell’applicazione le istruzioni SQL sono definite dinamicamente
è nota a priori la struttura di interrogazioni e risultati dall’applicazione in fase di esecuzione
rende possibile l’ottimizzazione a priori delle dipendono dal flusso applicativo eseguito
istruzioni SQL le istruzioni SQL possono essere fornite in ingresso
durante la fase di compilazione dell’applicazione, dall’utente
l’ottimizzatore del DBMS
compila l’istruzione SQL
crea il piano di esecuzione
queste operazioni non sono più necessarie durante
l’esecuzione dell’applicazione
esecuzione più efficiente
DB
MG
33
DB
MG
34

SQL dinamico SQL dinamico

La definizione a tempo di esecuzione delle Se la stessa interrogazione dinamica deve essere


istruzioni SQL eseguita più volte nella stessa sessione di lavoro
permette di definire applicazioni più complesse è possibile ridurre i tempi di esecuzione
offre una maggiore flessibilità si effettua una sola volta la compilazione e la scelta
rende più difficile la scrittura delle applicazioni del piano di esecuzione
durante la scrittura non è noto il formato del si esegue l’interrogazione più volte (con valori diversi
risultato dell’interrogazione delle variabili)
rende l’esecuzione meno efficiente
durante ogni esecuzione dell’applicazione, è
necessario compilare e ottimizzare ogni istruzione
SQL

DB
MG
35
DB
MG
36

Elena Baralis
©2007 Politecnico di Torino 6
Basi di dati SQL per le applicazioni

Embedded SQL

Le istruzioni SQL sono “incorporate”


nell’applicazione scritta in un linguaggio di
programmazione tradizionale (C, C++, Java, ..)
la sintassi SQL è diversa da quella del linguaggio
ospite
Le istruzioni SQL non sono direttamente
SQL per le applicazioni
compilabili da un compilatore tradizionale
devono essere riconosciute
sono precedute dalla parola chiave EXEC SQL
devono essere sostituite da istruzioni nel
linguaggio di programmazione ospite

DB
MG DB
MG
38

Precompilazione Embedded SQL: compilazione

Il precompilatore
identifica le istruzioni SQL incorporate nel codice file C + SQL
parti precedute da EXEC SQL 1 DBMS
sostituisce le istruzioni SQL con chiamate a Precompilatore
funzioni di una API specifica del DBMS prescelto
funzioni scritte nel linguaggio di programmazione file C + chiamate a informazioni sulle
ospite funzioni di libreria istruzioni SQL presenti
(opzionale) invia le istruzioni SQL statiche al DBMS 2 del DBMS 3 nel programma
che le compila e le ottimizza Compilatore C Ottimizzatore
Il precompilatore è legato al DBMS prescelto
piano di esecuzione
file eseguibile per le istruzioni SQL
DB
MG
39
DB
MG
statiche del programma

Precompilatore Embedded SQL: esecuzione

Il precompilatore dipende da tre elementi Durante l’esecuzione del programma


dell’architettura del sistema 1. Il programma invia l’istruzione SQL al DBMS
linguaggio ospite esegue una chiamata a una funzione di libreria del
DBMS DBMS
sistema operativo
È necessario disporre del precompilatore adatto
per l’architettura prescelta

DB
MG
41
DB
MG
42

Elena Baralis
©2007 Politecnico di Torino 7
Basi di dati SQL per le applicazioni

Embedded SQL: esecuzione Embedded SQL: esecuzione

Durante l’esecuzione del programma


1. Il programma invia l’istruzione SQL al DBMS
file eseguibile DBMS
esegue una chiamata a una funzione di libreria del
1
DBMS
istruzione SQL
2. Il DBMS genera il piano di esecuzione dell’istruzione
se è già stato predefinito deve solo recuperarlo

DB
MG
43
DB
MG
44

Embedded SQL: esecuzione Embedded SQL: esecuzione

Durante l’esecuzione del programma


1. Il programma invia l’istruzione SQL al DBMS
file eseguibile DBMS
esegue una chiamata a una funzione di libreria del
1
2 DBMS
istruzione SQL
2. Il DBMS genera il piano di esecuzione dell’istruzione
se è già stato predefinito deve solo recuperarlo
piano di
3. Il DBMS esegue l’ istruzione SQL
esecuzione

DB
MG
45
DB
MG
46

Embedded SQL: esecuzione Embedded SQL: esecuzione

Durante l’esecuzione del programma


1. Il programma invia l’istruzione SQL al DBMS
file eseguibile DBMS
esegue una chiamata a una funzione di libreria del
1 DBMS
istruzione SQL
2
2. Il DBMS genera il piano di esecuzione dell’istruzione
se è già stato predefinito deve solo recuperarlo
piano di
3. Il DBMS esegue l’ istruzione SQL
esecuzione
4. Il DBMS restituisce il risultato dell’istruzione SQL
utilizza un’area di transito per la memorizzazione
temporanea dei dati
3

dati
DB
MG
47
DB
MG
48

Elena Baralis
©2007 Politecnico di Torino 8
Basi di dati SQL per le applicazioni

Embedded SQL: esecuzione Embedded SQL: esecuzione

Durante l’esecuzione del programma


1. Il programma invia l’istruzione SQL al DBMS
file eseguibile DBMS
esegue una chiamata a una funzione di libreria del
1
2 DBMS
istruzione SQL
risultato 2. Il DBMS genera il piano di esecuzione dell’istruzione
se è già stato predefinito deve solo recuperarlo
4 piano di
3. Il DBMS esegue l’istruzione SQL
esecuzione
4. Il DBMS restituisce il risultato dell’istruzione SQL
utilizza un’area di transito per la memorizzazione
temporanea dei dati
3
5. Il programma elabora il risultato
dati
DB
MG
49
DB
MG
50

Esempio di codice embedded SQL Esempio di codice embedded SQL

#include <stdlib.h>
..... EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION .....
char VarCodF[6]; if (alpha>beta) {
int NumSoci; EXEC SQL SELECT NSoci, Sede
char Sede[16]; INTO :NumSoci, :Sede
EXEC SQL END DECLARE SECTION FROM F
WHERE CodF=:VarCodF;

int alpha, beta;


printf(“%d %s”, NumSoci, Sede);
....
......
EXEC SQL DECLARE F TABLE (CodF CHAR(5) NOT NULL,
}
NomeF CHAR(20) NOT NULL,
.....
NSoci SMALLINT NOT NULL,
Sede CHAR(15) NOT NULL);
DB G
.....
M
51
DB
MG
52

Esempio di codice embedded SQL Esempio di codice embedded SQL

#include <stdlib.h> #include <stdlib.h>


..... Dichiarazione variabili del .....
EXEC SQL BEGIN DECLARE SECTION linguaggio ospite usate EXEC SQL BEGIN DECLARE SECTION
char VarCodF[6]; nelle istruzioni SQL char VarCodF[6];
int NumSoci; int NumSoci;
char Sede[16]; char Sede[16];
EXEC SQL END DECLARE SECTION EXEC SQL END DECLARE SECTION
(Opzionale)
Dichiarazione delle tabelle
int alpha, beta; int alpha, beta;
usate nell’applicazione
.... ....
EXEC SQL DECLARE F TABLE (CodF CHAR(5) NOT NULL, EXEC SQL DECLARE F TABLE (CodF CHAR(5) NOT NULL,
NomeF CHAR(20) NOT NULL, NomeF CHAR(20) NOT NULL,
NSoci SMALLINT NOT NULL, NSoci SMALLINT NOT NULL,
Sede CHAR(15) NOT NULL); Sede CHAR(15) NOT NULL);
B
DM G
.....
53 B
DM G
.....
54

Elena Baralis
©2007 Politecnico di Torino 9
Basi di dati SQL per le applicazioni

Esempio di codice embedded SQL Esempio di codice embedded SQL

Dichiarazione dell’area di comunicazione


EXEC SQL INCLUDE SQLCA; EXEC SQL INCLUDE SQLCA;
..... .....
if (alpha>beta) { if (alpha>beta) {
EXEC SQL SELECT NSoci, Sede EXEC SQL SELECT NSoci, Sede
INTO :NumSoci, :Sede INTO :NumSoci, :Sede
FROM F FROM F
WHERE CodF=:VarCodF; WHERE CodF=:VarCodF;

printf(“%d %s”, NumSoci, Sede); printf(“%d %s”, NumSoci, Sede);


...... ......
Esecuzione di un’istruzione SQL
} }
..... .....

DB
MG
55
DB
MG
56

Esempio di codice embedded SQL Variabili del linguaggio ospite

È possibile introdurre nelle istruzioni SQL


EXEC SQL INCLUDE SQLCA;
riferimenti a variabili del linguaggio ospite
..... Variabili del linguaggio ospite
if (alpha>beta) { variabili in lettura
EXEC SQL SELECT NSoci, Sede permettono l’esecuzione interattiva delle istruzioni
INTO :NumSoci, :Sede le variabili sono usate come parametri nei predicati
FROM F di selezione al posto delle costanti
WHERE CodF=:VarCodF;
variabili in scrittura
printf(“%d %s”, NumSoci, Sede); variabili in cui è memorizzata la tupla corrente
...... indicate dopo la parola chiave INTO nelle istruzioni
} SELECT e FETCH
.....

DB
MG
57
DB
MG
58

Variabili del linguaggio ospite Controllo di tipo

Nei programmi Il tipo delle variabili deve essere compatibile con


la dichiarazione delle variabili è delimitata dalla il tipo delle colonne SQL corrispondenti
coppia di istruzioni i nomi delle variabili e delle colonne SQL possono
EXEC SQL BEGIN DECLARE SECTION essere uguali
EXEC SQL END DECLARE SECTION
nelle istruzioni SQL le variabili sono precedute dal
simbolo “:” per distinguerle dai nomi delle colonne

DB
MG
59
DB
MG
60

Elena Baralis
©2007 Politecnico di Torino 10
Basi di dati SQL per le applicazioni

Controllo semantico Area di transito

Ogni istruzione SQL DML deve far riferimento a È necessario definire un’area di comunicazione
oggetti già definiti nella base di dati tra DBMS e linguaggio ospite
Il precompilatore effettua il controllo semantico alcuni precompilatori includono in automatico la
delle istruzioni SQL definizione dell’area di comunicazione
accedendo alla base di dati per reperire nel in altri casi è necessario usare l’istruzione
dizionario dei dati lo schema degli oggetti EXEC SQL INCLUDE SQLCA
referenziati È necessario disporre di variabili apposite per
è necessaria la possibilità di connettersi al DBMS conoscere lo stato dell’ultima istruzione SQL
durante la precompilazione del codice
eseguita
oppure considerando le definizioni delle tabelle
variabile SQLCA.SQLCODE
presenti nel codice
definita in automatico
istruzione EXEC SQL DECLARE
DB
MG
61
DB
MG
62

Esecuzione di istruzioni SQL Esecuzione di istruzioni SQL

L’embedded SQL permette di eseguire tutte le Dopo l’esecuzione è possibile verificare lo stato
tipologie di istruzioni SQL dell’istruzione eseguita mediante la variabile
DML SQLCA.SQLCODE
DDL comando eseguito correttamente
Esecuzione di un’istruzione SQL SQLCODE=0
comando non eseguito a causa di un errore
EXEC SQL IstruzioneSQL;
SQLCODE≠0
il valore di SQLCODE specifica il tipo di errore

DB
MG
63
DB
MG
64

Istruzioni di aggiornamento e DDL Interrogazioni

Istruzioni che non restituiscono un insieme di Si opera in modo diverso in funzione del numero
tuple di tuple restituite dall’interrogazione
è necessario verificare se l’operazione è andata a una sola tupla
buon fine esecuzione dell’istruzione SELECT
SQLCODE=0 indicazione delle variabili in cui memorizzare il
non ci sono risultati da analizzare risultato direttamente nell’istruzione SELECT
non è necessario l’uso di cursori non è necessario l’uso di cursori
un insieme di tuple
definizione e uso di un cursore associato
all’istruzione SELECT
indicazione delle variabili in cui memorizzare le
singole tuple lette nell’istruzione FETCH

DB
MG
65
DB
MG
66

Elena Baralis
©2007 Politecnico di Torino 11
Basi di dati SQL per le applicazioni

Esempio: selezione di una sola tupla Esempio: selezione di una sola tupla

Selezionare il numero di soci e la sede del Selezionare il numero di soci e la sede del
fornitore il cui valore del codice è contenuto nella fornitore il cui valore del codice è contenuto nella
variabile ospite VarCodF variabile ospite VarCodF

EXEC SQL SELECT NSoci, Sede INTO :NumSoci, :Sede EXEC SQL SELECT NSoci, Sede INTO :NumSoci, :Sede
FROM F FROM F
WHERE CodF = :VarCodF; WHERE CodF = :VarCodF;

Nell’interrogazione SQL si indicano dopo la parola Nella clausola WHERE è possibile utilizzare
chiave INTO le variabili in cui memorizzare il variabili del linguaggio ospite al posto di costanti
risultato

DB
MG
67
DB
MG
68

Esempio: selezione di una sola tupla Cursore

Occorre verificare sempre lo stato dell’operazione Il cursore permette di leggere singolarmente le


dopo l’esecuzione tuple che fanno parte del risultato di
SQLCODE = 0 un’interrogazione
interrogazione eseguita correttamente deve essere associato a un’interrogazione specifica
i valori selezionati sono stati memorizzati nelle Ogni interrogazione SQL che può restituire un
variabili indicate nell’interrogazione (NumSoci e Sede)
insieme di tuple deve essere associata a un
SQLCODE = 100 cursore
nessuna tupla soddisfa il predicato
SQLCODE < 0
errore di esecuzione
più record soddisfano il predicato
tabella non disponibile
DB
MG
... 69
DB
MG
70

Operazioni sui cursori Dichiarazione

Operazioni di base sui cursori Istruzione DECLARE


dichiarazione dichiarazione della struttura del cursore
apertura assegnazione di un nome al cursore
lettura (tipicamente all’interno di un ciclo) definizione dell’interrogazione associata al cursore
chiusura
Simili alle modalità di gestione di un file

DB
MG
71
DB
MG
72

Elena Baralis
©2007 Politecnico di Torino 12
Basi di dati SQL per le applicazioni

Istruzione DECLARE Istruzione DECLARE

EXEC SQL DECLARE NomeCursore [SCROLL] CURSOR EXEC SQL DECLARE NomeCursore [SCROLL] CURSOR
FOR InterrogazioneSQL FOR InterrogazioneSQL
[FOR <READ ONLY| UPDATE [OF ElencoAttributi]>]; [FOR <READ ONLY| UPDATE [OF ElencoAttributi]>];

Opzione READ ONLY Opzione SCROLL


il cursore può essere usato solo per leggere i l’applicazione può muoversi liberamente sul
risultati risultato
opzione di default lettura in avanti e indietro

DB
MG
73
DB
MG
74

Istruzione DECLARE Apertura

EXEC SQL DECLARE NomeCursore [SCROLL] CURSOR Istruzione OPEN


FOR InterrogazioneSQL apertura del cursore
[FOR <READ ONLY| UPDATE [OF ElencoAttributi]>]; esecuzione dell’interrogazione sulla base di dati
memorizzazione del risultato in un’area temporanea
Opzione UPDATE
il cursore può essere usato in un’istruzione di EXEC SQL OPEN NomeCursore;
aggiornamento
è possibile specificare quali attributi saranno
Dopo l’apertura il cursore si trova prima della
aggiornati prima tupla del risultato

DB
MG
75
DB
MG
76

Lettura Istruzione FETCH

Istruzione FETCH EXEC SQL FETCH [Posizione FROM] NomeCursore


lettura della prossima tupla disponibile INTO ElencoVariabili;
memorizzazione della tupla in una variabile del
programma ospite
aggiornamento della posizione del cursore
Se nella definizione del cursore è presente
spostamento del cursore in avanti di una riga
l’opzione SCROLL il parametro Posizione può
spostamento alla tupla successiva assumere i valori
È necessario definire un ciclo per leggere tutte le next, prior, first, last, absolute, relative
tuple del risultato Altrimenti può assumere solo il valore next
si utilizza il linguaggio ospite valore di default
ogni chiamata dell’istruzione FETCH all’interno del
ciclo seleziona una sola tupla
DB
MG
77
DB
MG
78

Elena Baralis
©2007 Politecnico di Torino 13
Basi di dati SQL per le applicazioni

Posizione del cursore (1/2) Posizione del cursore (2/2)

Valori della Posizione absolute espressioneIntera


next lettura della riga i-esima del risultato
lettura della riga successiva alla riga corrente la posizione i è il risultato dell’espressione intera

prior relative espressioneIntera


lettura della riga precedente alla riga corrente come absolute ma il punto di riferimento è la
posizione corrente
first
lettura della prima riga del risultato
last
lettura dell’ultima riga del risultato

DB
MG
79
DB
MG
80

Chiusura Osservazioni

Istruzione CLOSE All’interno di un’applicazione, un cursore


chiusura del cursore è definito una sola volta
liberazione dell’area temporanea contenente il può essere usato più volte
risultato dell’interrogazione deve essere aperto e chiuso ogni volta
il risultato dell’interrogazione non è più accessibile
aggiornamento della base di dati nel caso di cursori
Si possono definire più cursori nella stessa
associati a interrogazioni aggiornabili applicazione

EXEC SQL CLOSE NomeCursore;

DB
MG
81
DB
MG
82

Esempio: selezione fornitori Esempio: selezione fornitori

Presentare a video il codice e il numero di soci #include <stdio.h>


#include <stdlib.h>
dei fornitori la cui sede è contenuta nella variabile #include <string.h>

ospite VarSede /************************** Gestione errori **********************************/


il valore di VarSede è fornito dall’utente come void sql_error(char *msg)
{
parametro dell’applicazione EXEC SQL WHENEVER SQLERROR CONTINUE;
fprintf(stderr,"\n%s\n", msg);
fprintf(stderr,"codice interno errore: %ld\n", sqlca.sqlcode);
fprintf(stderr,"%s\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK;
exit(EXIT_FAILURE);
}

DB
MG
83
DB
MG
84

Elena Baralis
©2007 Politecnico di Torino 14
Basi di dati SQL per le applicazioni

Esempio: selezione fornitori Esempio: selezione fornitori

/******************************** MAIN ***********************************/ /* Dichiarazione cursore */


int main(int argc,char **argv) EXEC SQL DECLARE fornitoriSelezionati CURSOR FOR
{ SELECT CodF,NSoci FROM F WHERE Sede = :VarSede;
EXEC SQL BEGIN DECLARE SECTION;
char username[20]="bdati"; /* Impostazione valore VarSede */
char password[20]=“passbdati"; strcpy(VarSede,argv[1]);
char VarSede[16];
char CodF[6]; /* Apertura del cursore */
int NSoci; EXEC SQL OPEN fornitoriSelezionati;
EXEC SQL END DECLARE SECTION;
if (sqlca.sqlcode!=0)
/* Gestione diretta degli errori */ sql_error("Errore in fase di apertura cursore");
EXEC SQL WHENEVER SQLERROR CONTINUE;
/* Stampa dei dati selezionati */
/* Apertura connessione */ printf("Elenco fornitori\n");
EXEC SQL CONNECT TO forniture@127.0.0.1 USER :username IDENTIFIED BY :password;

if (sqlca.sqlcode!=0)

DB DB
sql_error("Errore in fase di connessione"); 85 86
MG MG

Esempio: selezione fornitori Esempio: selezione fornitori

do {
EXEC SQL FETCH fornitoriSelezionati INTO :CodF, :NSoci; /* Chiusura cursore */
/* Verifica stato ultima operazione di fetch */ EXEC SQL CLOSE fornitoriSelezionati;
switch(sqlca.sqlcode) { }
case 0: /* Letta correttamente una nuova tupla */
{ /* Stampa a video della tupla */
printf("%s,%d",CodF, NSoci);
}
break;

case 100: /* Sono finiti i dati */


break;

default: /* Si e' verificato un errore */


sql_error("Errore in fase di lettura dei dati");
break;
}
}

DB DB
while (sqlca.sqlcode==0); 87 88
MG MG

Esempio: selezione fornitori Esempio: selezione fornitori

#include <stdio.h> /******************************** MAIN ***********************************/


#include <stdlib.h> int main(int argc,char **argv)
#include <string.h> {
EXEC SQL BEGIN DECLARE SECTION;
/************************** Gestione errori **********************************/ char username[20]="bdati";
void sql_error(char *msg) char password[20]=“passbdati";
{ char VarSede[16];
EXEC SQL WHENEVER SQLERROR CONTINUE; char CodF[6];
Definizione variabili
fprintf(stderr,"\n%s\n", msg); int NSoci;
fprintf(stderr,"codice interno errore: %ld\n", sqlca.sqlcode); EXEC SQL END DECLARE SECTION;
fprintf(stderr,"%s\n",sqlca.sqlerrm.sqlerrmc);
Gestione errori
EXEC SQL ROLLBACK; /* Gestione diretta degli errori */
exit(EXIT_FAILURE); EXEC SQL WHENEVER SQLERROR CONTINUE;
}
/* Apertura connessione */
EXEC SQL CONNECT TO forniture@127.0.0.1 USER :username IDENTIFIED BY :password;

if (sqlca.sqlcode!=0)

DB DB
89 sql_error("Errore in fase di connessione"); 90
MG MG

Elena Baralis
©2007 Politecnico di Torino 15
Basi di dati SQL per le applicazioni

Esempio: selezione fornitori Esempio: selezione fornitori

/******************************** MAIN ***********************************/ /* Dichiarazione cursore */


int main(int argc,char **argv) EXEC SQL DECLARE fornitoriSelezionati CURSOR FOR
{ SELECT CodF,NSoci FROM F WHERE Sede = :VarSede;
EXEC SQL BEGIN DECLARE SECTION;
char username[20]="bdati"; /* Impostazione valore VarSede */ Definizione cursore
char password[20]=“passbdati"; strcpy(VarSede,argv[1]);
char VarSede[16];
char CodF[6]; /* Apertura del cursore */
int NSoci; EXEC SQL OPEN fornitoriSelezionati;
EXEC SQL END DECLARE SECTION;
if (sqlca.sqlcode!=0)
/* Gestione diretta degli errori */
Connessione con il DBMS sql_error("Errore in fase di apertura cursore");
EXEC SQL WHENEVER SQLERROR CONTINUE;
/* Stampa dei dati selezionati */
/* Apertura connessione */ printf("Elenco fornitori\n");
EXEC SQL CONNECT TO forniture@127.0.0.1 USER :username IDENTIFIED BY :password;

if (sqlca.sqlcode!=0)

DB DB
sql_error("Errore in fase di connessione"); 91 92
MG MG

Esempio: selezione fornitori Esempio: selezione fornitori

/* Dichiarazione cursore */ do {
EXEC SQL DECLARE fornitoriSelezionati CURSOR FOR EXEC SQL FETCH fornitoriSelezionati INTO :CodF, :NSoci;
SELECT CodF,NSoci FROM F WHERE Sede = :VarSede; /* Verifica stato ultima operazione di fetch */
switch(sqlca.sqlcode) {
/* Impostazione valore VarSede */ case 0: /* Letta correttamente una nuova tupla */
strcpy(VarSede,argv[1]); { /* Stampa a video della tupla */
printf("%s,%d",CodF, NSoci);
/* Apertura del cursore */ }
EXEC SQL OPEN fornitoriSelezionati; break;

if (sqlca.sqlcode!=0) case 100: /* Sono finiti i dati */


Ciclo di lettura
sql_error("Errore in fase di apertura cursore"); Apertura cursore break;
delle tuple
/* Stampa dei dati selezionati */ default: /* Si e' verificato un errore */
printf("Elenco fornitori\n"); sql_error("Errore in fase di lettura dei dati");
break;
}
}

DB DB
93 while (sqlca.sqlcode==0); 94
MG MG

Esempio: selezione fornitori Esempio: selezione fornitori

do { do {
EXEC SQL FETCH fornitoriSelezionati INTO :CodF, :NSoci; EXEC SQL FETCH fornitoriSelezionati INTO :CodF, :NSoci;
/* Verifica stato ultima operazione di fetch */ /* Verifica stato ultima operazione di fetch */
switch(sqlca.sqlcode) { Lettura di una tupla switch(sqlca.sqlcode) {
case 0: /* Letta correttamente una nuova tupla */ case 0: /* Letta correttamente una nuova tupla */
{ /* Stampa a video della tupla */ { /* Stampa a video della tupla */
printf("%s,%d",CodF, NSoci); printf("%s,%d",CodF, NSoci);
} }
break; break;

case 100: /* Sono finiti i dati */ case 100: /* Sono finiti i dati */
break; break;
Analisi dell’esito
della lettura
default: /* Si e' verificato un errore */ default: /* Si e' verificato un errore */
sql_error("Errore in fase di lettura dei dati"); sql_error("Errore in fase di lettura dei dati");
break; break;
} }
} }

DB DB
while (sqlca.sqlcode==0); 95 while (sqlca.sqlcode==0); 96
MG MG

Elena Baralis
©2007 Politecnico di Torino 16
Basi di dati SQL per le applicazioni

Esempio: selezione fornitori Aggiornamento mediante cursori

/* Chiusura cursore */
È possibile aggiornare o cancellare la tupla
EXEC SQL CLOSE fornitoriSelezionati; puntata da un cursore
}
Chiusura cursore aggiornamento
EXEC SQL UPDATE NomeTabella
SET NomeColonna = Espressione
{, NomeColonna = Espressione}
WHERE CURRENT OF NomeCursore;

cancellazione
EXEC SQL DELETE FROM NomeTabella
WHERE CURRENT OF NomeCursore;

DB
MG
97
DB
MG
98

Aggiornamento mediante cursori Gestione delle transazioni

L’aggiornamento e la cancellazione sono possibili In un programma embededd SQL è possibile


se e solo se definire i limiti di una transazione
il cursore è stato definito in modo appropriato inizio di una transazione
opzione FOR UPDATE nell’istruzione DECLARE EXEC SQL BEGIN TRANSACTION;
esiste una corrispondenza uno a uno tra le tuple termine di una transazione con successo
del risultato e le tuple presenti nel DBMS EXEC SQL COMMIT;
fallimento di una transazione
EXEC SQL ROLLBACK;

DB
MG
99
DB
MG
100

Gestione delle transazioni

Fino a quando non si invocano in modo esplicito


le istruzioni
COMMIT o ROLLBACK
Le operazioni SQL di aggiornamento devono
essere considerate “tentativi di aggiornamento”
SQL per le applicazioni

DB
MG
101
DB
MG

Elena Baralis
©2007 Politecnico di Torino 17
Basi di dati SQL per le applicazioni

Call Level Interface Call Level Interface

Le richieste sono inviate al DBMS per mezzo di Esistono diverse soluzioni di tipo Call Level
funzioni del linguaggio ospite Interface (CLI)
soluzione basata su interfacce predefinite standard SQL/CLI
API, Application Programming Interface ODBC (Open DataBase Connectivity)
le istruzioni SQL sono passate come parametri alle soluzione proprietaria Microsoft di SQL/CLI
funzioni del linguaggio ospite JDBC (Java Database Connectivity)
non esiste il concetto di precompilatore soluzione per il mondo Java
Il programma ospite contiene direttamente le OLE DB
chiamate alle funzioni messe a disposizione ADO
dall’API ADO.NET

DB
MG
103
DB
MG
104

Modalità d’uso Interazione con il DBMS

Indipendentemente dalla soluzione CLI adottata, 1. Chiamata a una primitiva delle API per creare
esiste una strutturazione comune dell’interazione una connessione con il DBMS
con il DBMS 2. Invio sulla connessione di un’istruzione SQL
apertura della connessione con il DBMS 3. Ricezione di un risultato in risposta all’istruzione
esecuzione di istruzioni SQL inviata
chiusura della connessione nel caso di SELECT, di un insieme di tuple
4. Elaborazione del risultato ottenuto
esistono apposite primitive per leggere il risultato
5. Chiusura della connessione al termine della
sessione di lavoro

DB
MG
105
DB
MG
106

JDBC (Java Database Connectivity) JDBC: interazione con il DBMS

Soluzione CLI per il mondo JAVA Caricamento del driver specifico per il DBMS
L’architettura prevede utilizzato
un insieme di classi e interfacce standard Creazione di una connessione
utilizzate dal programmatore Java
Esecuzione delle istruzioni SQL
indipendenti dal DBMS
creazione di uno statement
un insieme di classi “proprietarie” (driver)
richiesta di esecuzione dell’istruzione
implementano le interfacce e le classi standard per
fornire la comunicazione con un DBMS specifico elaborazione del risultato nel caso di interrogazioni
dipendono dal DBMS utilizzato Chiusura dello statement
sono invocate a runtime Chiusura della connessione
in fase di compilazione dell’applicazione non sono
necessarie

DB
MG
107
DB
MG
108

Elena Baralis
©2007 Politecnico di Torino 18
Basi di dati SQL per le applicazioni

Caricamento del DBMS driver Caricamento del DBMS driver

Il driver è specifico per il DBMS utilizzato È la prima operazione da effettuare


Il caricamento avviene tramite l’istanziazione Non è necessario conoscere in fase di
dinamica della classe associata al driver compilazione del codice quale DBMS sarà usato
Object Class.forName(String nomeDriver) la lettura del nome del driver può avvenire a
nomeDriver contiene il nome della classe da runtime da un file di configurazione
istanziare
esempio: “oracle.jdbc.driver.OracleDriver”

DB
MG
109
DB
MG
110

Creazione di una connessione Esecuzione di istruzioni SQL

Invocazione del metodo getConnection della L’esecuzione di un’istruzione SQL richiede l’uso di
classe DriverManager un’interfaccia specifica
Connection DriverManager.getConnection(String url, denominata Statement
String user, String password) Ogni oggetto Statement
url è associato a una connessione
contiene l’informazione necessaria per identificare il
è creato tramite il metodo createStatement della
DBMS a cui ci si vuole collegare
classe Connection
formato legato al driver utilizzato
Statement createStatement()
user e password
credenziali di autenticazione

DB
MG
111
DB
MG
112

Istruzioni di aggiornamento e DDL Interrogazioni

L’esecuzione dell’istruzione richiede l’invocazione Esecuzione immediata dell’interrogazione


su un oggetto Statement del metodo il server compila ed esegue immediatamente
int executeUpdate(String istruzioneSQL) l’istruzione SQL ricevuta
istruzioneSQL Esecuzione “preparata” dell’interrogazione
è l’istruzione SQL da eseguire utile quando si deve eseguire la stessa istruzione
il metodo restituisce SQL più volte nella stessa sessione di lavoro
il numero di tuple elaborate (inserite, modificate, varia solo il valore di alcuni parametri
cancellate) l’istruzione SQL
il valore 0 per i comandi DDL è compilata (preparata) una volta sola e il suo piano
di esecuzione è memorizzato dal DBMS
è eseguita molte volte durante la sessione

DB
MG
113
DB
MG
114

Elena Baralis
©2007 Politecnico di Torino 19
Basi di dati SQL per le applicazioni

Esecuzione immediata Lettura del risultato

È richiesta dall’invocazione su un oggetto L’oggetto ResultSet è analogo a un cursore


Statement del seguente metodo dispone di metodi per
ResultSet executeQuery(String istruzioneSQL) spostarsi sulle righe del risultato
istruzioneSQL next()
first()
è l’interrogazione SQL da eseguire
...
il metodo restituisce sempre una collezione di tuple
estrarre i valori di interesse dalla tupla corrente
oggetto di tipo ResultSet getInt(String nomeAttributo)
gestione uguale per interrogazioni che getString(String nomeAttributo)
restituiscono al massimo una tupla ....
possono restituire più tuple

DB
MG
115
DB
MG
116

Statement preparato Preparazione dello Statement

L’istruzione SQL “preparata” è Si utilizza un oggetto di tipo PreparedStatement


compilata una sola volta creato con il metodo
all’inizio dell’esecuzione dell’applicazione PreparedStatement preparStatement(String istruzioneSQL)
eseguita più volte istruzioneSQL
prima di ogni esecuzione è necessario specificare il contiene il comando SQL da eseguire
valore corrente dei parametri dove si vuole specificare la presenza di un parametro è
presente il simbolo “?”
Modalità utile quando è necessario ripetere più
Esempio
volte l’esecuzione della stessa istruzione SQL
PreparedStatement pstmt;
permette di ridurre il tempo di esecuzione
pstmt=conn.preparStatement(“SELECT CodF, NSoci
la compilazione è effettuata una volta sola FROM F WHERE Sede=?”);

DB
MG
117
DB
MG
118

Impostazione dei parametri Esecuzione dell’istruzione preparata

Sostituzione dei simboli ? per l’esecuzione corrente Si invoca su un oggetto PreparedStatement il


Si evoca su un oggetto PreparedStatement uno dei metodo appropriato
seguenti metodi interrogazione SQL
void setInt(int numeroParametro, int valore) ResultSet executeQuery()
void setString(int numeroParametro, String valore) aggiornamento
... ResultSet executeUpdate()
numeroParametro indica la posizione del parametro da I due metodi non hanno nessun parametro di
assegnare ingresso
possono essere presenti più parametri nella stessa
istruzione SQL sono già stati definiti in precedenza
il primo parametro è associato al numero 1 l’istruzione SQL da eseguire
valore indica il valore da assegnare al parametro i suoi parametri di esecuzione
DB
MG
119
DB
MG
120

Elena Baralis
©2007 Politecnico di Torino 20
Basi di dati SQL per le applicazioni

Esempio: statement preparati Esempio: statement preparati

..... .....
PreparedStatement pstmt=conn.prepareStatement(“UPDATE P PreparedStatement pstmt=conn.prepareStatement(“UPDATE P
SET Colore=? WHERE CodP=?”); SET Colore=? WHERE CodP=?”);

/* Assegnazione del colore RossoElettrico al prodotto P1 */ /* Assegnazione del colore RossoElettrico al prodotto P1 */
pstmt.setString(1,”RossoElettrico”); pstmt.setString(1,”RossoElettrico”);
pstmt.setString(2,”P1”); pstmt.setString(2,”P1”);
pstmt.executeUpdate(); pstmt.executeUpdate();

/* Assegnazione del colore BluNotte al prodotto P5 */ /* Assegnazione del colore BluNotte al prodotto P5 */
pstmt.setString(1,”BluNotte”); pstmt.setString(1,”BluNotte”);
pstmt.setString(2,”P5”); pstmt.setString(2,”P5”);
pstmt.executeUpdate(); pstmt.executeUpdate();

DB
MG
121
DB
MG
122

Chiusura di statement e connessione Chiusura di uno statement

Quando uno statement o una connessione non La chiusura di uno statement


servono più è eseguita invocando il metodo close sull’oggetto
devono essere immediatamente chiusi Statement
Sono rilasciate le risorse void close()

dell’applicazione Sono rilasciate le risorse associate all’istruzione


del DBMS SQL corrispondente
che non sono più utilizzate

DB
MG
123
DB
MG
124

Chiusura di una connessione Gestione delle eccezioni

La chiusura di una connessione Gli errori sono gestiti mediante eccezioni di tipo
deve essere eseguita quando non è più necessario SQLException
interagire con il DBMS L’eccezione SQLException contiene
chiude il collegamento con il DBMS e rilascia le una stringa che descrive l’errore
relative risorse
una stringa che identifica l’eccezione
chiude anche gli statement associati alla
in modo conforme a Open Group SQL Specification
connessione
un codice d’errore specifico per il DBMS utilizzato
è eseguita invocando il metodo close sull’oggetto
Connection
void close()

DB
MG
125
DB
MG
126

Elena Baralis
©2007 Politecnico di Torino 21
Basi di dati SQL per le applicazioni

Esempio: selezione fornitori Esempio: selezione fornitori

Presentare a video il codice e il numero di soci import java.io.*;


import java.sql.*;
dei fornitori la cui sede è contenuta nella variabile
ospite VarSede class FornitoriSede {

il valore di VarS