Basi di dati
Claudia Raibulet
[email protected]
Chiave primaria


Definizione:Insieme di attributi che identificano univocamente
le ennuple di una relazione
Esempi:
• Il numero di matricola identifica gli studenti: non ci sono due
ennuple con lo stesso valore dell’attributo Matricola
• I dati anagrafici identificano gli studenti: non ci sono due
ennuple uguali su tutti e tre gli attributi Cognome, Nome e
Data di Nascita
L’importanza della chiave primaria


L’esistenza delle chiavi garantisce l’accessibilità a ciascun
dato della base di dati
Ogni singolo valore è univocamente accessibile tramite:
• nome della relazione
• valore della chiave
• nome dell’attributo

Le chiavi sono lo strumento principale attraverso il quale
vengono correlati i dati in relazioni diverse (“il modello
relazionale è basato su valori”)
Operazioni di aggiornamento
 INSERT
inserisce nuove tuple nel DB
 DELETE cancella tuple dal DB
 UPDATE modifica tuple del DB


Tutte le istruzioni possono operare su un insieme di tuple
In ogni caso gli aggiornamenti riguardano una sola
relazione sulla base di una condizione che può
coinvolgere anche altre relazioni
Operazioni di aggiornamento

INSERT può usare il risultato di una query per
eseguire inserimenti multipli

DELETE e UPDATE possono fare uso di
condizioni per specificare le tuple da cancellare o
modificare
INSERT
INSERT INTO Tabella [ ( Attributi ) ]
VALUES ( Valori )
oppure
INSERT INTO Tabella [ ( Attributi )]
SELECT ...
INSERT
È possibile inserire una nuova tupla specificandone i
valori
INSERT INTO Sedi (Sede, Responsabile, Citta)
VALUES (‘S04’, ‘Bruni’, ‘Firenze’)

INSERT INTO Sedi (Sede, Citta)
VALUES (‘S04’,‘Firenze’)
-- sede senza responsabile
Esempi di query INSERT
INSERT INTO Persone VALUES ('Mario', 25, 52)
INSERT INTO Persone (Nome, Eta, Reddito)
VALUES ('Pino', 25, 52)
INSERT INTO Persone (Nome, Reddito)
VALUES ('Lino', 55)
INSERT INTO Persone (Nome)
SELECT Padre
FROM Paternita
WHERE Padre NOT IN (SELECT Nome
FROM Persone)
INSERT: Osservazioni




L’ordinamento degli attributi (se presente) e dei
valori è significativo
Le due liste debbono avere lo stesso numero di
elementi
Se la lista di attributi è omessa, si fa riferimento a
tutti gli attributi della relazione, secondo l’ordine
con cui sono stati definiti
Se la lista di attributi non contiene tutti gli attributi
della relazione, per gli altri viene inserito un valore
nullo (che deve essere permesso) o un valore di
default
DELETE
DELETE FROM Tabella
[ WHERE Condizione ]


L’istruzione DELETE può fare uso di una condizione
per specificare le tuple da cancellare
Esempio:
DELETE FROM Sedi
WHERE Citta = ‘Bologna’
-- elimina le sedi di Bologna
Esempi di query DELETE
DELETE FROM Persone
WHERE Eta < 35
DELETE FROM Paternita
WHERE Figlio NOT IN ( SELECT Nome
FROM Persone)
DELETE FROM Paternita
Osservaziono DELETE



Elimina le ennuple che soddisfano la condizione
Può causare (se i vincoli di integrità referenziale
sono definiti con politiche di reazione cascade)
eliminazioni da altre relazioni
Ricordare: se la where viene omessa, si intende
where true
DELETE

Per cancellare tutte le tuple da STUDENTE
(mantenendo lo schema della tabella):
DELETE FROM Studente

Per cancellare completamente la tabella
STUDENTE (contenuto e schema):
DROP TABLE Studente
UPDATE
UPDATE NomeTabella
SET Attributo = < Espressione |
SELECT … |
NULL |
DEFAULT >
[ WHERE Condizione ]
UPDATE

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’
UPDATE

Esempio: si vuole promuovere Gianni a dirigente
e contemporaneamente aumentare il suo stipendio
del 10%
UPDATE Impiegati
SET Mansione = 'dirigente’,
Stipendio = 1.10*Stipendio
WHERE Nome = 'Gianni’;
Ancora esempi UPDATE
UPDATE Persone SET Reddito = 45
WHERE Nome = 'Piero'
UPDATE Persone
SET Reddito = Reddito * 1.1
WHERE Eta < 30
SELECT


Le interrogazioni SQL hanno una struttura selectfrom-where:
select AttrEspr [[ as ] Alias ] {, AttrEspr [[ as ] Alias ] }
from Tabella [[ as ] Alias ] {, Tabella [[ as ] Alias ] }
[ where Condizione ]
Le tre parti della query sono chiamate:
• clausola select / target list
• clausola from
• clausola where

La query effettua il prodotto cartesiano delle tabelle nella
clausola from, considera solo le righe che soddisfano la
condizione nella clausola where e per ogni riga valuta le
espressioni nella target list
Esempio
Esempio

Si chiede di selezionare tutti gli elementi presenti nella
tabella Studente:
SELECT *
FROM Studente
Esempi di query

Si chiede di selezionare le informazioni relative a tutti gli
studenti che vivono nella citta’ di Bologna:
SELECT *
FROM Studente
WHERE citta’ = ‘Bologna’

Si chiede di selezionare il nome degli studenti del dipartimento
di Inf:
SELECT Nome
FROM Studente
WHERE CDip = ‘Inf’
Esempi di query

Si chiede di selezionare le informazioni relative a
tutti gli studenti che vivono a Torino o a Roma:
SELECT *
FROM Studente
WHERE citta’ = ‘Torino’ OR citta’ = ‘Roma’

Si chiede di selezionare la matricola degli studenti
del dipartimento di informatica di Torino:
SELECT matr
FROM Studente
WHERE citta’ = ‘Torino’ AND CDip = ‘Inf’
JOIN



JOIN rappresenta un'importante funzionalità in
quanto permette di correlare dati in relazioni diverse.
In SQL il JOIN è espresso tramite un prodotto
cartesiano tra tabelle a cui sono applicati uno o più
predicati di join.
Un predicato di join esprime una condizione che
deve essere verificata dalle tuple del risultato
dell'interrogazione.
Esempio JOIN
Studenti
Esami
Query: Estrarre Nome, Cognome e Voto di tutti gli studenti che
hanno sostenuto l’esame di ‘Analisi I’.
SELECT Studenti.Cognome,Studenti.Nome, Esami.Voto
FROM Studenti, Esami
WHERE (Studenti.Matricola = Esami.Studente) AND
(Esame.Corso = ‘Analisi I’)
Esercizio (I)

Si chiede di creare due tabelle:
• Tabella Giocatore caratterizzata dagli attributi
Identificatore, Cognome, Nome, DataDiNascita e
NomeSquadra
• Tabella Risultato caratterizzata dagli attibuti Data,
Squadra1, Squadra2, Risultato1, Risultato2

Si chiede di indicare le chiavi primarie delle due
tabelle.
Esercizio (II)

Si chiede di inserire i seguenti dati nelle tabelle:
Esercizio (III)

Si chiede di:
• Visualizzare i nome e cognomi di tutti i gioccatori della
squadra del Brasile
• Visualizzare i risultati delle partite giocate il giorno 17
di giugno 2006
Esercizio (IV)

Che cosa sara’ visualizzato come risultato dopo
l’esecuzione delle seguenti query:
SELECT *
FROM Giocatore
WHERE NomeSquadra = ‘Italia’
SELECT Squadra1, Squadra2
FROM Risultati
WHERE Risultato1 <> Risultato2
Esercizio (V)

Si chiede di visualizzare i risultati relativi alle
partite in cui hanno vinto le sequadre ospiti.
Scarica

20 giugno 2006 - Lezione 15