Corso di Laurea in Biotecnologie
Informatica
(Basi di Dati)
SQL: Data Manipulation Language (DML)
Anno Accademico 2009/2010
Da:
• Atzeni, Ceri, Paraboschi, Torlone - Basi di Dati
• Lucidi del Corso di Basi di Dati 1, Prof. Carlo Batini, Laurea in Informatica, AA 2007-2008
1
Introduzione
Cos’è SQL (Structured Query
Language)?
E’ un linguaggio che consente di gestire le
Basi di Dati relazionali. Esso è
contemporaneamente un:
 Data Definition Language (DDL), cioè
consente di creare lo schema della Base
di Dati (e delle relazioni)
 Data Manipulation Language (DML),
cioè consente di manipolare le istanze
2
della Base di Dati
Introduzione
Vedremo come SQL (come DML)
permetta di:
 interrogare la Base di Dati
 modificare la Base di Dati eseguendo:
 inserimenti
 cancellazioni
 modifiche
Nota Bene: in questa e nelle successive slide le parole scritte in
maiuscolo (salvo indicazione contraria) sono parole appartenenti al
linguaggio
3
Interrogazione di una Base di
Dati
L’istruzione SQL per interrogare una Base di
Dati è SELECT. Ci limitiamo alla seguente
sintassi:
SELECT <attrList>
FROM <tableList>
[WHERE <condition>]
dove <attrList> è la lista degli attributi (separati da
virgola) i cui valori devono essere riprodotti come esito
dell’interrogazione, <tableList> è la lista delle tabelle
(separate da virgola) coinvolte nell’interrogazione, e
<condition> è una condizione da soddisfare (vedi nel
seguito…). La clausola WHERE è opzionale.
4
Interrogazione di una Base di
Dati
Come funziona l’istruzione SELECT?
1. Viene eseguito il prodotto cartesiano delle
tabelle specificate in <tableList> (seguendo lo
stesso ordine in cui vengono elencate)
2. Dall’insieme di ennuple del prodotto cartesiano
del punto 1, vengono selezionate solo quelle che
soddisfano <condition> della clausola WHERE (se
esiste). Se non esiste la clausola WHERE vengono
prese tutte le ennuple del prodotto cartesiano
3. Delle ennuple al punto 2 vengono forniti solo i
valori relativi agli attributi specificati in
<attrList>
5
Interrogazione di una Base di
Dati
Come funziona l’istruzione SELECT?
Nel caso particolare in cui <tableList> sia
composta da un’unica tabella R, allora al punto 1
precedente vengono prese tutte le ennuple di R
così come sono.
NOTA: Gli esempi successivi fanno riferimento alla
Base di Dati della prossima slide per cui si suppone
di avere già creato lo schema. In particolare sono
state definite le chiavi primarie (in rosso) di
Studenti e Corsi e le due chiavi esterne (in blu) di
Esami. Non si suppongno altri vincoli.
6
Interrogazione di una Base di
Dati (esempio)
Studenti
Matricola
Cognome
Nome
DataNascita
276545
Rossi
Maria
25/11/1971
485745
Neri
Anna
23/04/1972
200768
Verdi
Fabio
12/02/1972
587614
Rossi
Luca
10/10/1971
Esami
MatricolaStudente
276545
276545
200768
Corsi
Codice
01
03
04
Voto
28
27
24
Titolo
Analisi
Chimica
Chimica
CodiceCorso
01
04
04
Docente
Giani
Melli
Belli
7
Interrogazione di una Base di
Dati (esempio1)
L’istruzione:
SELECT Cognome, Nome
FROM Studenti
produce l’output:
Rossi
Maria
Neri
Anna
Verdi
Fabio
Rossi
Luca
8
Interrogazione di una Base di
Dati (esempio2)
L’istruzione:
SELECT Cognome, Nome
FROM Studenti
WHERE Cognome=‘Rossi’
produce l’output:
Rossi
Maria
Rossi
Luca
9
Interrogazione di una Base di
Dati (esempio3)
L’istruzione:
SELECT Cognome, Nome, DataNascita
FROM Studenti
WHERE Matricola=276545
produce l’output:
Rossi
Maria
25/11/1971
10
Interrogazione di una Base di
Dati (esempio4)
L’istruzione:
SELECT Cognome, Nome, Voto
FROM Studenti, Esami
WHERE Matricola=276545 AND
Matricola=MatricolaStudente
produce l’output:
Rossi
Maria
28
Rossi
Maria
27
11
Interrogazione di una Base di
Dati (esempio5)
L’istruzione:
SELECT Cognome, Nome, Voto, Titolo
FROM Studenti, Esami, Corsi
WHERE Matricola=276545 AND
Matricola=MatricolaStudente AND
Codice=CodiceCorso
produce l’output:
Rossi
Maria
28
Analisi
Rossi
Maria
27
Chimica
12
Interrogazione di una Base di
Dati (esempio5)
L’istruzione:
SELECT Cognome, Nome, Voto, Titolo
FROM Studenti, Esami, Corsi
WHERE Matricola=276545 AND
Matricola=MatricolaStudente AND
Codice=CodiceCorso AND Voto > 27
produce l’output:
Rossi
Maria
28
Analisi
13
Interrogazione di una Base di
Dati (esempio6)
L’istruzione:
SELECT *
FROM Studenti
è equivalente al comando:
SELECT Matricola, Cognome, Nome, DataNascita
FROM Studenti
* è un’abbreviazione per l’intera lista di attributi
della tabella della clausola FROM.
14
Interrogazione di una Base di
Dati
Nel caso in cui le tabelle della clausola FROM
condividano il nome di qualche attributo, per
evitare ambiguità di interpretazione nella
<attrList>, si devono specificare gli attributi
preceduti dal nome della tabella a cui
appartengano e da un punto ‘.’
Ad esempio se nella nostra Base di Dati al posto di
MatricolaStudente della tabella Esami si
mettesse semplicemente Matricola (stesso nome
della chiave primaria della tabella Studenti), si
potrebbero avere ambiguità in una SELECT che
coinvolge entrambe le tabelle ed entrambi gli
15
attributi.
Interrogazione di una Base di
Dati (esempio7)
L’istruzione:
SELECT Matricola
FROM Studenti, Esami
è ambiguo in quanto non si capisce se si intende
Matricola in Studenti o Matricola in Esami. Ad
esempio se si intende Matricola di Studenti, il
comando corretto è:
SELECT Studenti.Matricola
FROM Studenti, Esami
16
Interrogazione di una Base di
Dati
Nella condizione della clausola WHERE, si può
usare un particolare operatore denominato
LIKE che permette di selezionare stringhe di
caratteri che rispettano un certo modello
che contiene:
 caratteri specifici
 caratteri jolly
 _ che denota un arbitrario carattere
 % che denota una stringa con un
numero arbitrario di caratteri
17
Interrogazione di una Base di
Dati (esempio8)
L’istruzione:
SELECT Matricola, Cognome, Nome
FROM Studenti
WHERE Cognome LIKE ‘%er%’
produce l’output:
485745
Neri
Anna
200768
Verdi
Fabio
18
Interrogazione di una Base di
Dati (esempio9)
L’istruzione:
SELECT Matricola, Cognome, Nome
FROM Studenti
WHERE Cognome LIKE ‘%er_’
produce l’output:
485745
Neri
Anna
19
Interrogazione di una Base di
Dati
Nella condizione della clausola WHERE, si può
usare IS NULL per ricercare le ennuple con
valori nulli.
Ad esempio il comando:
SELECT Matricola, Cognome, Nome
FROM Studenti
WHERE Cognome IS NULL
produce un output vuoto poiché nessuna ennupla in
Studenti ha valore NULL in corrispondenza di
Cognome.
20
Interrogazione di una Base di
Dati
Il comando SELECT permette l’uso di una serie
di operatori aggregati che vengono valutati
solo dopo avere eseguito l’interrogazione di
base e che servono per:





contare le ennuple  COUNT
trovare il minimo  MIN
trovare il massimo  MAX
effettuare la somma  SUM
effettuare la media  AVG
21
Interrogazione di una Base di
Dati
L’operatore COUNT conta il numero di ennuple di
una tabella dopo aver eseguito un’interrogazione
di base
Ad esempio:
SELECT COUNT(*)
FROM Studenti
WHERE Cognome=‘Rossi’
produce il numero di studenti (nella tabella
Studenti) il cui cognome è Rossi. L’interrogazione
di base si ottiene eliminando l’operatore COUNT.
Attenzione! COUNT non tiene conto dei valori nulli, cioè elimina, prima di
iniziare il conteggio, le ennuple (generate dall’interrogazione di base)
composte di soli valori nulli.
22
Interrogazione di una Base di
Dati
L’operatore MIN trova il minimo valore per un (solo)
attributo di una tabella dopo aver eseguito
un’interrogazione di base
Ad esempio:
SELECT MIN(DataNascita)
FROM Studenti
produce la data di nascita dello studente (tabella
Studenti) più anziano. L’interrogazione di base si
ottiene eliminando l’operatore MIN.
Attenzione! MIN non tiene conto dei valori nulli, cioè elimina, prima di
trovare il minimo, i valori nulli per l’attributo specificato come argomento.
23
Interrogazione di una Base di
Dati
L’operatore MAX trova il massimo valore per un
(solo) attributo di una tabella dopo aver eseguito
un’interrogazione di base
Ad esempio:
SELECT MAX(DataNascita)
FROM Studenti
produce la data di nascita dello studente (tabella
Studenti) più giovane. L’interrogazione di base si
ottiene eliminando l’operatore MAX.
Attenzione! MAX non tiene conto dei valori nulli, cioè elimina, prima di
trovare il massimo, i valori nulli per l’attributo specificato come argomento.
24
Interrogazione di una Base di
Dati
L’operatore SUM effettua la somma dei valori
relativi a un (solo) attributo di una tabella dopo
aver eseguito un’interrogazione di base
Ad esempio:
SELECT SUM(Voto)
FROM Esami
produce la somma di tutti i voti presenti nella
tabella Esami. L’interrogazione di base si ottiene
eliminando l’operatore SUM.
Attenzione! SUM non tiene conto dei valori nulli, cioè elimina, prima di
trovare la somma, i valori nulli per l’attributo specificato come argomento.
25
Interrogazione di una Base di
Dati
L’operatore AVG effettua la media dei valori relativi
a un (solo) attributo di una tabella dopo aver
eseguito un’interrogazione di base
Ad esempio:
SELECT AVG(Voto)
FROM Studenti, Esami
WHERE Matricola=276545 AND
Matricola=MatricolaStudente AND
Codice=CodiceCorso
produce la media dei voti dello studente con numero di
matricola pari a 276545.
Attenzione! SUM non tiene conto dei valori nulli, cioè elimina, prima di
trovare la somma, i valori nulli per l’attributo specificato come argomento.
26
Aggiornamento di una Base di
Dati
Le operazioni di aggiornamento di una Base di
Dati sono:
 inserimento  INSERT
 cancellazione  DELETE
 modifica  UPDATE
27
Aggiornamento di una Base di
Dati
L’operazione di inserimento di una ennupla in una
tabella della Base di Dati viene effettuata
tramite il comando INSERT:
INSERT INTO <tableName>(<attrList>)
VALUES(<valueList>)
dove <tableName> è il nome della tabella in cui si
vuole effettuare l’inserimento, <attrList> è la
lista degli attributi della tabella per cui si
vuole specificare un valore, <valueList> è la
lista che specifica i valori degli attributi di
<attrList> nello stesso ordine di <attrList>.
28
Aggiornamento di una Base di
Dati
Se <attrList> viene omessa, allora si fa
riferimento a tutti gli attributi della tabella
nello stesso ordine in cui sono stati elencati
nella CREATE TABLE.
Attenzione! Per gli attributi non specificati in
<attrList> viene inserito il valore di DEFAULT
se questo è stato specificato al momento di
creazione della tabella, altrimenti viene
inserito il valore NULL solo però se questo non
viola un eventuale vincolo di NOT NULL
specificato per l’attributo stesso (in caso
29
contrario l’operazione viene rifiutata).
Aggiornamento di una Base di
Dati (esempio1)
L’istruzione:
INSERT INTO Studenti (Matricola, Cognome,
Nome)
VALUES(23456, ‘Bianchi’, ‘Stefano’)
inserisce in Studenti la ennupla (23456, ‘Bianchi’,
‘Stefano’, NULL) in quanto il valore per
DataNascita non è stato specificato
30
Aggiornamento di una Base di
Dati
L’operazione di cancellazione di ennuple da una
tabella della Base di Dati viene effettuata
tramite il comando DELETE:
DELETE FROM <tableName>
[WHERE <condition>]
dove <tableName> è il nome della tabella da cui si
vogliono cancellare le ennuple che rispettano la
condizione specificata da <condition> (se esiste
la clausola WHERE che è opzionale).
Se la clausola WHERE viene omessa, allora tutte
le ennuple della tabella vengono cancellate.
31
Aggiornamento di una Base di
Dati (esempio2)
L’istruzione:
DELETE FROM Studenti
WHERE Cognome=‘Rossi’
cancella dalla tabella Studenti tutti gli studenti che
hanno cognome Rossi.
32
Aggiornamento di una Base di
Dati
L’operazione di aggiornamento di ennuple di una
tabella della Base di Dati viene effettuata
tramite il comando UPDATE:
UPDATE <tableName>
SET <attrName1>=<value1>,
…,
<attrNameN>=<valueN>
[WHERE <condition>]
dove <tableName> è il nome della tabella in cui si
vogliono aggiornare le ennuple che rispettano la
condizione specificata da <condition> (se esiste
33
la clausola WHERE che è opzionale).
Aggiornamento di una Base di
Dati
Se la clausola WHERE viene omessa, allora tutte
le ennuple della tabella vengono aggiornate.
La clausola SET specifica gli attributi <attrName*>
che devono essere aggiornati.
In altre parole si prendono le ennuple che rispettano
<condition> (se esiste, altrimenti si prendono
tutte) e si aggiorna ogni valore di <attrName*> al
valore specificato da <value*>, che può essere:
 DEFAULT
 NULL
 un’espressione
 e altro… (che non vediamo…)
34
Aggiornamento di una Base di
Dati (esempio3)
L’istruzione:
UPDATE Studenti
SET DataNascita=NULL
WHERE Cognome=‘Rossi’
aggiorna al valore NULL la data di nascita degli
studenti che hanno cognome Rossi.
35
Aggiornamento di una Base di
Dati (esempio4)
L’istruzione:
UPDATE Studenti
SET DataNascita=DEFAULT
WHERE Cognome=‘Rossi’
aggiorna al valore di default (eventualmente
specificato per l’attributo DataNascita
nell’istruzione CREATE TABLE) la data di nascita
degli studenti che hanno cognome Rossi.
36
Aggiornamento di una Base di
Dati (esempio5)
L’istruzione:
UPDATE Esami
SET Voto=18
WHERE Voto > 18 AND Voto <= 20
aggiorna a 18 tutti i voti degli esami con voto
compreso tra 18 e 20.
37
Aggiornamento di una Base di
Dati (esempio6)
L’istruzione:
UPDATE Esami
SET Voto=Voto-1
WHERE Voto > 28
decrementa di 1 i voti di tutti gli esami con voto
superiore a 28.
38
Scarica

SQL_DML