![Page 2: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/2.jpg)
Chiave primariaChiave 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
![Page 3: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/3.jpg)
L’importanza della chiave primariaL’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”)
![Page 4: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/4.jpg)
Operazioni di aggiornamentoOperazioni 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
![Page 5: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/5.jpg)
Operazioni di aggiornamentoOperazioni 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
![Page 6: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/6.jpg)
INSERTINSERT
INSERT INTO Tabella [ ( Attributi ) ]
VALUES ( Valori )
oppure
INSERT INTO Tabella [ ( Attributi )]
SELECT ...
![Page 7: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/7.jpg)
INSERTINSERT È 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
![Page 8: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/8.jpg)
Esempi di query INSERTEsempi di query INSERTINSERT 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 PadreFROM PaternitaWHERE Padre NOT IN (SELECT Nome FROM Persone)
![Page 9: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/9.jpg)
INSERT: OsservazioniINSERT: 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
![Page 10: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/10.jpg)
DELETEDELETEDELETE 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
![Page 11: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/11.jpg)
Esempi di query DELETEEsempi di query DELETE
DELETE FROM PersoneWHERE Eta < 35
DELETE FROM PaternitaWHERE Figlio NOT IN ( SELECT Nome FROM Persone)
DELETE FROM Paternita
![Page 12: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/12.jpg)
Osservaziono DELETEOsservaziono 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
![Page 13: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/13.jpg)
DELETEDELETE 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
![Page 14: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/14.jpg)
UPDATEUPDATE
UPDATE NomeTabellaSET Attributo = < Espressione
| SELECT … |
NULL | DEFAULT >
[ WHERE Condizione ]
![Page 15: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/15.jpg)
UPDATEUPDATE 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 SediSET Responsabile = ‘Bruni’, Citta = ‘Firenze’WHERE Sede = ‘S01’
UPDATE ImpSET Stipendio = 1.1 * StipendioWHERE Ruolo = ‘Programmatore’
![Page 16: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/16.jpg)
UPDATEUPDATE
Esempio: si vuole promuovere Gianni a dirigente e contemporaneamente aumentare il suo stipendio del 10%
UPDATE ImpiegatiSET Mansione = 'dirigente’, Stipendio = 1.10*StipendioWHERE Nome = 'Gianni’;
![Page 17: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/17.jpg)
Ancora esempi UPDATEAncora esempi UPDATE
UPDATE Persone SET Reddito = 45WHERE Nome = 'Piero'
UPDATE Persone SET Reddito = Reddito * 1.1WHERE Eta < 30
![Page 18: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/18.jpg)
SELECTSELECT Le interrogazioni SQL hanno una struttura select-
from-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
![Page 19: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/19.jpg)
EsempioEsempio
![Page 20: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/20.jpg)
EsempioEsempio Si chiede di selezionare tutti gli elementi presenti nella
tabella Studente:SELECT * FROM Studente
![Page 21: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/21.jpg)
Esempi di queryEsempi di query Si chiede di selezionare le informazioni relative a tutti gli
studenti che vivono nella citta’ di Bologna:SELECT * FROM StudenteWHERE citta’ = ‘Bologna’
Si chiede di selezionare il nome degli studenti del dipartimento di Inf:
SELECT NomeFROM StudenteWHERE CDip = ‘Inf’
![Page 22: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/22.jpg)
Esempi di queryEsempi di query Si chiede di selezionare le informazioni relative a
tutti gli studenti che vivono a Torino o a Roma:SELECT * FROM StudenteWHERE citta’ = ‘Torino’ OR citta’ = ‘Roma’
Si chiede di selezionare la matricola degli studenti
del dipartimento di informatica di Torino:SELECT matrFROM StudenteWHERE citta’ = ‘Torino’ AND CDip = ‘Inf’
![Page 23: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/23.jpg)
JOINJOIN
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.
![Page 24: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/24.jpg)
Esempio JOINEsempio JOINStudenti
Esami
SELECT Studenti.Cognome,Studenti.Nome, Esami.VotoFROM Studenti, EsamiWHERE (Studenti.Matricola = Esami.Studente) AND
(Esame.Corso = ‘Analisi I’)
Query: Estrarre Nome, Cognome e Voto di tutti gli studenti che hanno sostenuto l’esame di ‘Analisi I’.
![Page 25: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/25.jpg)
Esercizio (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.
![Page 26: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/26.jpg)
Esercizio (II)Esercizio (II) Si chiede di inserire i seguenti dati nelle tabelle:
![Page 27: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/27.jpg)
Esercizio (III)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
![Page 28: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/28.jpg)
Esercizio (IV)Esercizio (IV) Che cosa sara’ visualizzato come risultato dopo
l’esecuzione delle seguenti query:SELECT *FROM GiocatoreWHERE NomeSquadra = ‘Italia’
SELECT Squadra1, Squadra2FROM RisultatiWHERE Risultato1 <> Risultato2
![Page 29: Basi di dati Claudia Raibulet raibulet@disco.unimib.it](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb5a497959361e8c6ef3/html5/thumbnails/29.jpg)
Esercizio (V)Esercizio (V)
Si chiede di visualizzare i risultati relativi alle partite in cui hanno vinto le sequadre ospiti.