Il 0% ha trovato utile questo documento (0 voti)
144 visualizzazioni

SQLbasi

Il documento descrive il linguaggio SQL, spiegando le sue caratteristiche generali e le principali istruzioni per la definizione e la manipolazione dei dati. Vengono illustrate le istruzioni per la creazione e modifica di tabelle, l'inserimento, cancellazione e aggiornamento di dati.

Caricato da

alessio colletta
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
144 visualizzazioni

SQLbasi

Il documento descrive il linguaggio SQL, spiegando le sue caratteristiche generali e le principali istruzioni per la definizione e la manipolazione dei dati. Vengono illustrate le istruzioni per la creazione e modifica di tabelle, l'inserimento, cancellazione e aggiornamento di dati.

Caricato da

alessio colletta
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 47

Il linguaggio SQL: le basi

Versione elettronica: SQLa-basi.pdf


SQL: caratteristiche generali

n SQL (Structured Query Language) è il linguaggio standard de facto per


DBMS relazionali, che riunisce in sé funzionalità di DDL, DML e DCL
n SQL è un linguaggio dichiarativo (non-procedurale), ovvero non specifica
la sequenza di operazioni da compiere per ottenere il risultato
n SQL è “relazionalmente completo”, nel senso che ogni espressione
dell’algebra relazionale può essere tradotta in SQL
n …inoltre SQL fa molte altre cose…

n Il modello dei dati di SQL è basato su tabelle anziché relazioni:


n Possono essere presenti righe (tuple) duplicate
n In alcuni casi l’ordine delle colonne (attributi) ha rilevanza
n …il motivo è pragmatico (ossia legato a considerazioni sull’efficienza)

n SQL adotta la logica a 3 valori introdotta con l’Algebra Relazionale

SQL - Basi 2
SQL: standard e dialetti

n Il processo di standardizzazione di SQL è iniziato nel 1986


n Nel 1992 è stato definito lo standard SQL-2 (o SQL-92) da parte dell’ISO
(International Standards Organization), e dell’ANSI (American National
Standards Institute), rispettivamente descritti nei documenti ISO/IEC
9075:1992 e ANSI X3.135-1992 (identici!)
n Del 1999 è lo standard SQL:1999, che rende SQL un linguaggio
computazionalmente completo (e quindi con istruzioni di controllo!) per il
supporto di oggetti persistenti…
n Allo stato attuale ogni sistema ha ancora un suo dialetto:
n supporta (in larga parte) SQL-2
n ha già elementi di SQL:1999
n ha anche costrutti non standard
n Quello che vediamo è la parte più “diffusa”

SQL - Basi 3
Organizzazione del materiale

n La trattazione di SQL viene suddivisa in più parti come segue:

n DDL di base e DML “per gli operatori dell’algebra” e per le operazioni


di modifica dei dati
n Per fare “quello che si fa anche in algebra”
n DML per il raggruppamento dei dati
n Per derivare informazioni di sintesi dai dati
n DML con blocchi innestati
n Per scrivere richieste complesse
n DDL per la definizione di viste e vincoli generici
n Per migliorare la qualità dei dati
n Utilizzo di SQL da linguaggio ospite
n Per scrivere applicazioni

SQL - Basi 4
Data Definition Language (DDL)

n Il DDL di SQL permette di definire schemi di relazioni (o “table”, tabelle),


modificarli ed eliminarli
n Permette di inoltre di specificare vincoli, sia a livello di tupla (o “riga”) che
a livello di tabella
n Permette di definire nuovi domini, oltre a quelli predefiniti
n Per vincoli e domini si può anche fare uso del DML (quindi

inizialmente non si trattano completamente)

n Inoltre si possono definire viste (“view”), ovvero tabelle virtuali, e indici,


per accedere efficientemente ai dati.

SQL - Basi 5
Creazione ed eliminazione di tabelle

n Mediante l’istruzione CREATE TABLE si definisce lo schema di una tabella


e se ne crea un’istanza vuota

n Per ogni attributo va specificato il dominio, un eventuale valore di default e


eventuali vincoli

n Infine possono essere espressi altri vincoli a livello di tabella

n Mediante l’istruzione DROP TABLE è possibile eliminare lo schema di una


tabella (e conseguentemente la corrispondente istanza)

DROP TABLE Imp

SQL - Basi 6
Definizione di tabelle: esempio

CREATE TABLE Imp (


CodImp char(4) PRIMARY KEY,
CF char(16) NOT NULL UNIQUE, -- chiave
Cognome varchar(60) NOT NULL,
Nome varchar(30) NOT NULL,
Sede char(3) REFERENCES Sedi(Sede), -- FK
Ruolo char(20) DEFAULT ‘Programmatore’,
Stipendio int CHECK (Stipendio > 0),
UNIQUE (Cognome, Nome) -- chiave
)

CREATE TABLE Prog (


CodProg char(3),
Citta varchar(40),
PRIMARY KEY (CodProg,Citta) )
SQL - Basi 7
Valori nulli e valori di default

n Per vietare la presenza di valori nulli, è sufficiente imporre il vincolo NOT


NULL

CF char(16) NOT NULL,

n Per ogni attributo è inoltre possibile specificare un valore di default, che


verrà usato se all’atto dell’inserimento di una tupla non viene fornito
esplicitamente un valore per l’attributo relativo

Ruolo char(20) DEFAULT ‘Programmatore’

SQL - Basi 8
Chiavi

n La definizione di una chiave avviene esprimendo un vincolo UNIQUE, che


si può specificare in linea, se la chiave consiste di un singolo attributo

CF char(16) UNIQUE,

o dopo aver dichiarato tutti gli attributi, se la chiave consiste di uno o più
attributi:

UNIQUE(Cognome,Nome)

n Ovviamente, specificare
UNIQUE(Cognome),
UNIQUE(Nome)
sarebbe molto più restrittivo

SQL - Basi 9
Chiavi primarie

n La definizione della chiave primaria di una tabella avviene specificando un


vincolo PRIMARY KEY, o in linea o come vincolo di tabella

CodImp char(4) PRIMARY KEY

PRIMARY KEY (CodProg,Citta)

n Va osservato che:
n La specifica di una chiave primaria non è obbligatoria

n Si può specificare al massimo una chiave primaria per tabella

n Non è necessario specificare NOT NULL per gli attributi della primary
key

SQL - Basi 10
Chiavi straniere (“foreign key”)

n La definizione di una foreign key avviene specificando un vincolo


FOREIGN KEY, e indicando quale chiave viene referenziata

Sede char(3) REFERENCES Sedi(Sede)

n Ovvero
FOREIGN KEY (Sede) REFERENCES Sedi(Sede)

n Nell’esempio, Imp è detta tabella di riferimento e Sedi tabella di


destinazione (analoga terminologia per gli attributi coinvolti)
n Le colonne di destinazione devono essere una chiave della tabella
destinazione (non necessariamente la chiave primaria)
n Se si omettono gli attributi destinazione, vengono assunti quelli della
chiave primaria
Sede char(3) REFERENCES Sedi

SQL - Basi 11
Vincoli generici (“check constraint”)

n Mediante la clausola CHECK è possibile esprimere vincoli di tupla arbitrari,


sfruttando tutto il potere espressivo di SQL
n La sintassi è: CHECK (<condizione>)
n Il vincolo è violato se esiste almeno una tupla che rende falsa la
<condizione>. Pertanto

Stipendio int CHECK (Stipendio > 0),

non permette tuple con stipendio negativo, ma ammette valori nulli per
l’attributo Stipendio
n Se CHECK viene espresso a livello di tabella (anziché nella definizione
dell’attributo) è possibile fare riferimento a più attributi della tabella stessa
CHECK (ImportoLordo = Netto + Ritenute)

SQL - Basi 12
Vincoli con nomi

n A fini diagnostici (e di documentazione) è spesso utile sapere quale vincolo


è stato violato a seguito di un’azione sul DB

n A tale scopo è possibile associare dei nomi ai vincoli, ad esempio:

Stipendio int CONSTRAINT StipendioPositivo


CHECK (Stipendio > 0),

CONSTRAINT ForeignKeySedi
FOREIGN KEY (Sede) REFERENCES Sedi

SQL - Basi 13
Modifica di tabelle

n Mediante l’istruzione ALTER TABLE è possibile modificare lo schema di


una tabella, in particolare:
n Aggiungendo attributi

n Aggiungendo o rimuovendo vincoli

ALTER TABLE Imp


ADD COLUMN Sesso char(1) CHECK (Sesso in (‘M’,‘F’))
ADD CONSTRAINT StipendioMax CHECK (Stipendio < 4000)
DROP CONSTRAINT StipendioPositivo
DROP UNIQUE(Cognome,Nome);

n Se si aggiunge un attributo con vincolo NOT NULL, bisogna prevedere un


valore di default, che il sistema assegnerà automaticamente a tutte le tuple
già presenti
ADD COLUMN Istruzione char(10) NOT NULL DEFAULT ‘Laurea’

SQL - Basi 14
Data Manipulation Language (DML)

n Le istruzioni principali del DML di SQL sono

SELECT esegue interrogazioni (query) sul DB


INSERT inserisce nuove tuple nel DB
DELETE cancella tuple dal DB
UPDATE modifica tuple del DB

n INSERT può usare il risultato di una query per eseguire inserimenti


multipli

n DELETE e UPDATE possono fare uso di condizioni per specificare le


tuple da cancellare o modificare

SQL - Basi 15
DB di riferimento per gli esempi

Imp Sedi
CodImp Nome Sede Ruolo Stipendio Sede Responsabile Citta
E001 Rossi S01 Analista 2000 S01 Biondi Milano
E002 Verdi S02 Sistemista 1500 S02 Mori Bologna
E003 Bianchi S01 Programmatore 1000 S03 Fulvi Milano

E004 Gialli S03 Programmatore 1000


E005 Neri S02 Analista 2500
Prog
E006 Grigi S01 Sistemista 1100
CodProg Citta
E007 Violetti S01 Programmatore 1000
P01 Milano
E008 Aranci S02 Programmatore 1200
P01 Bologna
P02 Bologna

SQL - Basi 16
L’istruzione SELECT

n È l’istruzione che permette di eseguire interrogazioni (query) sul DB


n La forma di base è:

SELECT A1,A2,..,Am
FROM R1,R2,..,Rn
WHERE <condizione>

ovvero:
n SELECT (o TARGET) list (cosa si vuole come risultato)
n clausola FROM (da dove si prende)
n clausola WHERE (che condizioni deve soddisfare)

SQL - Basi 17
SELECT su singola tabella

Codice, nome e ruolo dei dipendenti della sede S01


CodImp Nome Ruolo
E001 Rossi Analista
SELECT CodImp, Nome, Ruolo E003 Bianchi Programmatore
FROM Imp E006 Grigi Sistemista
WHERE Sede = ‘S01’ E007 Violetti Programmatore

n Si ottiene in questo modo:


n La clausola FROM dice di prendere la tabella IMP

n La clausola WHERE dice di prendere solo le tuple per cui Sede=‘S01’

n Infine, si estraggono i valori degli attributi (o “colonne”) nella SELECT


list

SQL - Basi 18
SELECT senza proiezione

n Se si vogliono tutti gli attributi:

SELECT CodImp, Nome, Sede, Ruolo, Stipendio


FROM Imp
WHERE Sede = ‘S01’

si può abbreviare con:

SELECT *
FROM Imp
WHERE Sede = ‘S01’

SQL - Basi 19
SELECT senza condizione

n Se si vogliono tutte le tuple:

SELECT CodImp, Nome, Ruolo


FROM Imp

n Quindi

SELECT *
FROM Imp

restituisce tutta l’istanza di Imp

SQL - Basi 20
Tabelle vs Relazioni

n Il risultato di una query SQL può contenere righe duplicate:


Ruolo
SELECT Ruolo Analista

FROM Imp Programmatore

WHERE Sede = ‘S01’ Sistemista


Programmatore

n Per eliminarle si usa l’opzione DISTINCT nella SELECT list

SELECT DISTINCT Ruolo Ruolo

FROM Imp Analista


Programmatore
WHERE Sede = ‘S01’
Sistemista

SQL - Basi 21
Espressioni nella clausola SELECT

n La SELECT list può contenere non solo attributi, ma anche espressioni:

SELECT CodImp, Stipendio*12 CodImp

FROM Imp E001 24000


E003 12000
WHERE Sede = ‘S01’
E006 13200
E007 12000

n Si noti che in questo caso la seconda colonna non ha un nome

SQL - Basi 22
Ridenominazione delle colonne

n Ad ogni elemento della SELECT list è possibile associare un nome a


piacere:

SELECT CodImp AS Codice, Stipendio*12 AS StipendioAnnuo


FROM Imp
Codice StipendioAnnuo
WHERE Sede = ‘S01’ E001 24000
E003 12000
E006 13200
E007 12000

n La parola chiave AS può anche essere omessa:

SELECT CodImp Codice,...

SQL - Basi 23
Pseudonimi

n Per chiarezza, ogni nome di colonna può essere scritto prefissandolo con
il nome della tabella:

SELECT Imp.CodImp AS Codice,


Imp.Stipendio*12 AS StipendioAnnuo
FROM Imp
WHERE Imp.Sede = ‘S01’

…e si può anche usare uno pseudonimo (alias) in luogo del nome della
tabella

SELECT I.CodImp AS Codice,


I.Stipendio*12 AS StipendioAnnuo
FROM Imp I -- oppure Imp AS I
WHERE I.Sede = ‘S01’

SQL - Basi 24
Operatore LIKE

n L’operatore LIKE, mediante le “wildcard” _ (un carattere arbitrario) e %


(una stringa arbitraria), permette di esprimere dei “pattern” su stringhe

Nomi degli impiegati che finiscono con una ‘i’ e hanno una ‘i’ in seconda
posizione

SELECT Nome Nome


Bianchi
FROM Imp
Gialli
WHERE Nome LIKE ‘_i%i’
Violetti

SQL - Basi 25
Operatore BETWEEN

n L’operatore BETWEEN permette di esprimere condizioni di appartenenza


a un intervallo

Nome e stipendio degli impiegati che hanno uno stipendio compreso tra
1300 e 2000 Euro (estremi inclusi)

SELECT Nome, Stipendio


FROM Imp
WHERE Stipendio BETWEEN 1300 AND 2000

Nome Stipendio
Rossi 2000
Verdi 1500

SQL - Basi 26
Operatore IN

n L’operatore IN permette di esprimere condizioni di appartenenza a un


insieme

Codici e sedi degli impiegati delle sedi S02 e S03


CodImp Sede
E002 S02
SELECT CodImp, Sede
E004 S03
FROM Imp
E005 S02
WHERE Sede IN (‘S02’,‘S03’)
E008 S02

n Lo stesso risultato si ottiene scrivendo:

SELECT CodImp, Sede


FROM Imp
WHERE Sede = ‘S02’ OR Sede = ‘S03’
SQL - Basi 27
Valori nulli

n Il trattamento dei valori nulli si basa su quanto già visto


Imp
SELECT CodImp CodImp Sede … Stipendio
FROM Imp E001 S01 2000

WHERE Stipendio > 1500 E002 S02 1500

OR Stipendio <= 1500 E003 S01 1000


E004 S03 NULL
CodImp
E005 S02 2500
restituisce solo E001
E006 S01 NULL
E002
E007 S01 1000
E003
E008 S02 1200
E005
E007
E008

SQL - Basi 28
Logica a 3 valori in SQL

n Nel caso di espressioni complesse, SQL ricorre alla logica a 3 valori: vero
(V), falso (F) e “sconosciuto” (?)

SELECT CodImp, Sede, Stipendio CodImp Sede Stipendio

FROM Imp E001 S01 2000


E004 S03 NULL
WHERE (Sede = ‘S03’)
E005 S02 2500
OR (Stipendio > 1500)

n Per verificare se un valore è NULL SELECT CodImp


si usa l’operatore IS FROM Imp
WHERE Stipendio IS NULL
n NOT (A IS NULL) si scrive anche
CodImp
A IS NOT NULL
E004
E006

SQL - Basi 29
Ordinamento del risultato

n Per ordinare il risultato di una query secondo i valori di una o più colonne
si introduce la clausola ORDER BY, e per ogni colonna si specifica se
l’ordinamento è per valori “ascendenti” (ASC, il default) o “discendenti”
(DESC)
Nome Stipendio
Neri 2500
SELECT Nome, Stipendio Rossi 2000
FROM Imp Verdi 1500

ORDER BY Stipendio DESC, Nome Aranci 1200


Grigi 1100
Bianchi 1000
Gialli 1000
Violetti 1000

SQL - Basi 30
Interrogazioni su più tabelle

n L’interrogazione

SELECT I.Nome, I.Sede, S.Citta


FROM Imp I, Sedi S
WHERE I.Sede = S.Sede
AND I.Ruolo = ‘Programmatore’

si interpreta come segue:


n Si esegue il prodotto Cartesiano di Imp e Sedi

n Si applicano i predicati della clausola WHERE

n Si estraggono le colonne della SELECT list

n Il predicato I.Sede = S.Sede è detto predicato di join, in quanto


stabilisce il criterio con cui le tuple di Imp e di Sedi devono essere
combinate
SQL - Basi 31
Interrogazioni su più tabelle: risultato

n Dopo avere applicato il predicato I.Sede = S.Sede:

I.CodImp I.Nome I.Sede I.Ruolo I.Stipendio S.Sede S.Responsabile S.Citta


E001 Rossi S01 Analista 2000 S01 Biondi Milano
E002 Verdi S02 Sistemista 1500 S02 Mori Bologna
E003 Bianchi S01 Programmatore 1000 S01 Biondi Milano
E004 Gialli S03 Programmatore 1000 S03 Fulvi Milano
E005 Neri S02 Analista 2500 S02 Mori Bologna
E006 Grigi S01 Sistemista 1100 S01 Biondi Milano
E007 Violetti S01 Programmatore 1000 S01 Biondi Milano
E008 Aranci S02 Programmatore 1200 S02 Mori Bologna

SQL - Basi 32
Ridenominazione del risultato

n Se la SELECT list contiene 2 o più colonne con lo stesso nome, è


necessario operare una ridenominazione per ottenere un output con tutte
le colonne intestate

SELECT I.Sede AS SedeE001, S.Sede AS AltraSede


FROM Imp I, Sedi S
WHERE I.Sede <> S.Sede
AND I.CodImp = ‘E001’

SedeE001 AltraSede
S01 S02
S01 S03

SQL - Basi 33
Self Join

n L’uso di alias è forzato quando si deve eseguire un self-join

Genitori G1 Genitori G2
Chi sono i nonni di Anna?
Genitore Figlio Genitore Figlio
Luca Anna Luca Anna
Maria Anna Maria Anna
Giorgio Luca Giorgio Luca
Silvia Maria Silvia Maria
Enzo Maria Enzo Maria

SELECT G1.Genitore AS Nonno


FROM Genitori G1, Genitori G2
WHERE G1.Figlio = G2.Genitore
AND G2.Figlio = ‘Anna’

SQL - Basi 34
Join espliciti

n Anziché scrivere i predicati di join nella clausola WHERE, è possibile


“costruire” una joined table direttamente nella clausola FROM

SELECT I.Nome, I.Sede, S.Citta


FROM Imp I JOIN Sedi S ON (I.Sede = S.Sede)
WHERE I.Ruolo = ‘Programmatore’

in cui JOIN si può anche scrivere INNER JOIN


n Altri tipi di join espliciti sono:
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
NATURAL JOIN

SQL - Basi 35
Left join
Guidatore
Nome Cognome Patente

Mario Rossi VR 2030020Y


Carlo Bianchi PZ 1012436B
Marco Neri AP 4544442R
Automobile

Targa Marca Modello NoPatente


AB 574 ww FIAT PUNTO VR 2030020Y

AA 652 FF FIAT BRAVA VR 2030020Y

BJ 747 XX LANCIA DELTA PZ 1012436B

BB 421 JJ FIAT UNO AP 2020030U


Left join
Estrarre i guidatori con le automobili loro associate, mantenendo
nel risultato anche i guidatori senza automobile

Select Nome, Cognome, GnoPatente, Targa, Marca Modello


From Guidatore G left join automobile A on (G.noPatente =
A.noPatente)

Nome Cognome G.NoPatente Targa Marca Modello


Mario Rossi VR 2030020Y AB 574 ww Fiat Punto

Mario Rossi VR 2030020Y AA 652 FF Fiat BRAVA

Carlo Bianchi PZ 1012436B BJ 747 XX Lancia DELTA

Marco Neri AP 4544442R NULL NULL NULL


Operatori insiemistici

n L’istruzione SELECT non permette di eseguire unione, intersezione e


differenza di tabelle
n Ciò che si può fare è combinare in modo opportuno i risultati di due
istruzioni SELECT, mediante gli operatori

UNION, INTERSECT, EXCEPT

n In tutti i casi gli elementi delle SELECT list devono avere tipi compatibili e
gli stessi nomi se si vogliono colonne con un’intestazione definita
n L’ordine degli elementi è importante (notazione posizionale)
n Il risultato è in ogni caso privo di duplicati, per mantenerli occorre
aggiungere l’opzione ALL:

UNION ALL, INTERSECT ALL, EXCEPT ALL

SQL - Basi 36
Operatori insiemistici: esempi (1)

R A B S C B
SELECT A B
1 a 1 a SELECT B
FROM R 1
1 a 1 b FROM R a
UNION 2
2 a 2 a UNION ALL a
SELECT C 3
SELECT B a
2 b 2 c FROM S 4
2 c 3 c FROM S b
c
3 b 4 d
b
SELECT A,B a
FROM R b
SELECT A A
UNION a
FROM R 1
SELECT B,C AS A c
UNION 2
FROM S c
SELECT C AS A 3
d
FROM S 4 Non corretta!

SQL - Basi 37
Operatori insiemistici: esempi (2)

R A B
1 a SELECT B B SELECT B B
1 a FROM R a FROM S d
2 a INTERSECT b EXCEPT
2 b SELECT B c SELECT B
2 c FROM S FROM R
3 b

S C B B B
SELECT B SELECT B
1 a FROM R a FROM R a
1 b
INTERSECT ALL a EXCEPT ALL b
2 a b
SELECT B SELECT B
2 c FROM S c FROM S
3 c
4 d

SQL - Basi 38
Istruzioni di aggiornamento dei dati

n Le istruzioni che permettono di aggiornare il DB sono

INSERT inserisce nuove tuple nel DB


DELETE cancella tuple dal DB
UPDATE modifica tuple del DB

n INSERT può usare il risultato di una query per eseguire inserimenti multipli

n DELETE e UPDATE possono fare uso di condizioni per specificare le tuple


da cancellare o modificare

n In ogni caso gli aggiornamenti riguardano una sola relazione

SQL - Basi 39
Inserimento di tuple: caso singolo

n È possibile inserire una nuova tupla specificandone i valori

INSERT INTO Sedi(Sede,Responsabile,Citta)


VALUES (‘S04’,‘Bruni’,‘Firenze’)

n Ci deve essere corrispondenza tra attributi e valori


n La lista degli attributi si può omettere, nel qual caso vale l’ordine con cui
sono stati definiti
n Se la lista non include tutti gli attributi, i restanti assumono valore NULL (se
ammesso) o il valore di default (se specificato)

INSERT INTO Sedi(Sede,Citta) -- sede senza responsabile


VALUES (‘S04’,‘Firenze’)

SQL - Basi 40
Inserimento di tuple: caso multiplo

n È possibile anche inserire le tuple che risultano da una query

INSERT INTO SediBologna(SedeBO,Resp)


SELECT Sede,Responsabile
FROM Sedi
WHERE Citta = ‘Bologna’

n Valgono ancora le regole viste per il caso singolo

n Gli schemi del risultato e della tabella in cui si inseriscono le tuple possono
essere diversi, l’importante è che i tipi delle colonne siano compatibili

SQL - Basi 41
Cancellazione di tuple

n L’istruzione DELETE può fare uso di una condizione per specificare le


tuple da cancellare

DELETE FROM Sedi -- elimina le sedi di Bologna


WHERE Citta = ‘Bologna’

n Che succede se la cancellazione porta a violare il vincolo di integrità


referenziale? (ad es.: che accade agli impiegati delle sedi di Bologna?)
n …lo vediamo tra 2 minuti

SQL - Basi 42
Modifica di tuple

n Anche l’istruzione UPDATE può fare uso di una condizione per specificare
le tuple da modificare e di espressioni per determinare i nuovi valori

UPDATE Sedi
SET Responsabile = ‘Bruni’,
Citta = ‘Firenze’
WHERE Sede = ‘S01’

UPDATE Imp
SET Stipendio = 1.1*Stipendio
WHERE Ruolo = ‘Programmatore’

n Anche l’UPDATE può portare a violare il vincolo di integrità referenziale

SQL - Basi 43
Politiche di “reazione”

n Anziché lasciare al programmatore il compito di garantire che a fronte di


cancellazioni e modifiche i vincoli di integrità referenziale siano rispettati, si
possono specificare opportune politiche di reazione in fase di definizione
degli schemi

CREATE TABLE Imp (


CodImp char(4) PRIMARY KEY,
Sede char(3),
...
FOREIGN KEY Sede REFERENCES Sedi
ON DELETE CASCADE -- cancellazione in cascata
ON UPDATE NO ACTION -- modifiche non permesse

n Altre politiche: SET NULL e SET DEFAULT

SQL - Basi 44
Riassumiamo:

n Il linguaggio SQL è lo standard de facto per interagire con DB relazionali


n Si discosta dal modello relazionale in quanto permette la presenza di
tuple duplicate (tabelle anziché relazioni)
n La definizione delle tabelle permette di esprimere vincoli e anche di
specificare politiche di reazione a fronte di violazioni dell’integrità
referenziale
n L’istruzione SELECT consiste nella sua forma base di 3 parti: SELECT,
FROM e WHERE
n A queste si aggiunge ORDER BY, per ordinare il risultato (e altre che
vedremo)
n Per trattare i valori nulli, SQL ricorre a una logica a 3 valori (vero, falso e
sconosciuto)

SQL - Basi 45

Potrebbero piacerti anche