Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
IN UN PARTICOLARE ISTANTE
ISTANZA di BASE DI DATI insieme di tutte tuple (n-uple - record) del DATABASE
IN UN PARTICOLARE ISTANTE
ovvero ’insieme delle istanze di tutte le relazioni di cui la base di
dati stessa è costituita.
IN UN PARTICOLARE ISTANTE = perché i dati VARIANO NEL TEMPO
MODELLO RELAZIONALE
CHIAVE Un sottoinsieme di attributi della relazione che ne identifica
UNIVOCAMENTE ogni tupla (record)
Una chiave deve essere fatta con il numero
UNIVOCITA’ MINIMALITA’ minimo possibile di attributi.
Non ci devono essere due chiavi Ad esempio una chiave CODICE FISCALE avrà solo una colonna
uguali per essere univoca, oppure potrei scegliere le tre colonne
NOME,COGNOME,DATA DI NASCITA ma non
NOME,COGNOME,DATA DI NASCITA, COLORE CAPELLI
MODELLO RELAZIONALE
Se una chiave non è MINIMA, è detta superchiave
SUPERCHIAVE
UNIVOCITA’ MINIMALITA’
MODELLO RELAZIONALE
Fra le varie possibili chiavi, se ne sceglie UNA che funzionerà da
CHIAVE PRIMARIA chiave primaria, tutte le altre chiavi si dicono chiavi candidate
La chiave scelta come primaria NON ammette valori NULLI
NOT NULL ES. STUDENTE(MATRICOLA, CF,NOME,COGNOME)
La chiave primaria viene
sottolineata Tutte le altre chiavi rimaste, ma non scelte come chiavi primaria,
sono le chiavi ALTERNATIVE o candidate.
CHIAVI CANDIDATE ES. STUDENTE(MATRICOLA, CF,NOME,COGNOME)
AK:CF
AK = Alternative Key
MODELLO RELAZIONALE
Condizioni di correttezza formale (per un corretto funzionamento)
VINCOLI DI INTEGRITA’ = LA CHIAVE A CUI SI FA RIFERIMENTO DEVE ESISTERE!
ENTITY INTEGRITY le chiavi primarie non possono assumere valore NULL
Quando si specifica una FK si dichiara un vincolo
CHIAVE ESTERNA (FOREIGN KEY) FK di integrità referenziale
Le chiavi esterne si dichiarano usando FILM(id, nome, anno, genere, regista)
REFERENCES in questo modo: regista REFERENCES artista(id)
ALGEBRA RELAZIONALE
FONDAMENTI
OPERATORI DELL’ALGEBRA RELAZIONALE
Operatori unari Operatori binari
selezione () prodotto cartesiano (X)
● ●
proiezione (π) join ( ⨝)
● ● unione (⋃)
● intersezione (∩)
● differenza (-)
●
Relazionali ÷
divisione (/ o )
●
Insiemistici
SELEZIONE ⇒GENERA UN SOTTOINSIEME ORIZZONTALE
Operatori unari
selezione ()
●
SELEZIONE ⇒GENERA UN SOTTOINSIEME ORIZZONTALE
Operatori unari
selezione ()
● Relazionali
R = pA VOGLIAMO FARE
R relazione UNA SELEZIONE dei soli nati nel 1981
p predicato
A insieme
SELEZIONE ⇒GENERA UN SOTTOINSIEME ORIZZONTALE
Operatori unari
selezione ()
●
Relazionali
R = Artista
anno=1981
R = pA
R relazione SELECT * FROM artista WHERE anno = 1981
p predicato [ p: anno = 1981]
A insieme π
PROIEZIONE ⇒GENERA UN SOTTOINSIEME VERTICALE
Operatori unari
proiezione (π)
● π
PROIEZIONE ⇒GENERA UN SOTTOINSIEME VERTICALE
Operatori unari
proiezione (π)
● Relazionali
R = π A
L VOGLIAMO FARE
R relazione UNA PROIEZIONE solo del
L lista attributi nome e del cognome
[L:nome,cognome]
A insieme π
PROIEZIONE ⇒GENERA UN SOTTOINSIEME VERTICALE
π
π
Operatori unari
proiezione (π)
● Relazionali π
R = Artista
nome,cognome
R = π A
L
R relazione SELECT nome, cognome FROM artista
L lista attributi [L:nome,cognome]
A insieme π
+
SELEZIONE PROIEZIONE
Operatori unari
selezione ()
● proiezione (π)
● π
+
SELEZIONE PROIEZIONE
Operatori unari
selezione ()
● proiezione (π)
●
VOGLIAMO FARE
UNA SELEZIONE ED UNA PROIEZIONE:
nome e cognome dei soli nati nel 1981 π
+
SELEZIONE PROIEZIONE ATTENZIONE! COSA FACCIAMO PRIMA?
Operatori unari
selezione ()
● proiezione (π)
●
VOGLIAMO FARE
UNA SELEZIONE ED UNA PROIEZIONE:
nome e cognome dei soli nati nel 1981 π
+
SELEZIONE PROIEZIONE ATTENZIONE! COSA FACCIAMO PRIMA?
π π
Operatori unari
selezione ()
●
proiezione (π)
●
VOGLIAMO FARE
UNA SELEZIONE ED UNA PROIEZIONE: se eseguiamo prima la proiezione, perdiamo
nome e cognome dei soli nati nel 1981 l’anno, e non possiamo più fare la selezione in
base all’anno.
π
+
SELEZIONE PROIEZIONE DOBBIAMO QUINDI FARE PRIMA LA SELEZIONE
Risultato:
Operatori unari
selezione ()
● proiezione (π)
● E SOLO DOPO L A PROIEZIONE
( )
π
R = Artista
nome,cognome anno=1981
VOGLIAMO FARE
UNA SELEZIONE ED UNA PROIEZIONE: SELECT nome, cognome FROM artista WHERE
nome e cognome dei soli nati nel 1981 anno = 1981
X
PRODOTTO CARTESIANO
Operatori binari
prodotto cartesiano (X)
●
Insiemistici X
PRODOTTO CARTESIANO
Operatori binari
prodotto cartesiano (X)
● Mostra tutte le possibili
combinazioni SELECT * FROM tabella1, tabella2
(ad esempio tra 2 tabelle) X
PRODOTTO CARTESIANO
Operatori binari
prodotto cartesiano (X)
●
ALTERNATIVA CON CROSS JOIN SELECT * FROM tabella1 CROSS JOIN tabella2
R = tabella1 X tabella2
JOIN ( ⨝)
Operatori binari
join ( ⨝)
●
Relazionali
JOIN ( ⨝) Operatori binari
join ( ⨝)
●
E’ un sottoinsieme del prodotto SELECT * FROM tabella1 t1 JOIN tabella2 t2 ON t1.nome = t2.nome
cartesiano
JOIN ( ⨝) Operatori binari
join ( ⨝)
●
ALIAS SELECT * FROM tabella1
JOIN tabella2 ON tabella1.nome = tabella2.nome
NOTA: in SQL possiamo utilizzare
degli alias, ovvero rinominare una SELECT * FROM tabella1 t1 JOIN tabella2 t2 ON t1.nome = t2.nome
tabella in altri caratteri, ad esempio
artista lo chiamiamo solo a
e film lo chiamiamo solo f Dettaglio: t1 t2 t1.nome t2.nome
SELECT * FROM tabella1 JOIN tabella2 ON =
JOIN ( ⨝) Operatori binari
join ( ⨝)
●
NOTA: è equivalente di:
SELECT * SELECT *
FROM tabella1 t1 JOIN tabella2 t2 ON FROM tabella1 t1, tabella2 t2
t1.nome = t2.nome WHERE t1.nome = t2.nome
R = tabella1 tabella2
⨝
THETA JOIN ( )
⨝
C Operatori binari
Il theta Join è chiamato anche Theta join ( )
⨝
●
Join Condizionale C
C = CONDIZIONE
INNER JOIN R = tabella1 tabella2
⨝
C
∧
SELECT * FROM tabella1 t1 JOIN tabella2 t2 C: t2.anno < 1991 t2.anno > 1981
ON t2.anno < 1991 AND t2.anno > 1981 ∧ = AND
EQUIJOIN ( )
⨝
C Operatori binari
Un caso particolare di theta Join Theta join ( )
⨝
●
è quando la condizione è di C
uguaglianza C = CONDIZIONE DI
UGUAGLIANZA
INNER JOIN R = tabella1 tabella2
⨝
C
=
SELECT * FROM tabella1 t1 JOIN tabella2 t2 C: t1.anno t2.anno
ON t1.anno = t2.anno ∧ = AND
LEFT JOIN ( =⨝) Operatori binari
Il left join fa una combinazione tra Left join ( =⨝)
●
2 tabelle mostrando anche la
tabella di sinistra LEFT che non ha
corrispondenze R = tabella1 =⨝ tabella2
SELECT * FROM tabella1 t1
INNER / OUTER JOIN LEFT JOIN tabella2 t2 ON t1.anno = t2.anno
LEFT JOIN ( =⨝) Operatori binari
Left join ( =⨝)
Il left join fa una combinazione tra 2 tabelle
SELECT * FROM tabella1 t1
LEFT JOIN tabella2 t2 ON t1.anno = t2.anno mostrando anche la tabella di sinistra LEFT che non
ha corrispondenze con la destra
RIGHT JOIN ( ⨝=) Operatori binari
Il left join fa una combinazione tra Right join ( ⨝=)
●
2 tabelle mostrando anche la
tabella di destra RIGHT che non
ha corrispondenze R = tabella1 tabella2
⨝=
SELECT * FROM tabella1 t1
INNER / OUTER JOIN RIGHT JOIN tabella2 t2 ON t1.anno = t2.anno
RIGHT JOIN ( ⨝=) Operatori binari
Right join ( ⨝=)
Il left join fa una combinazione tra 2 tabelle
SELECT * FROM tabella1 t1 mostrando anche la tabella di destra RIGHT che non
RIGHT JOIN tabella2 t2 ON t1.anno = t2.anno ha corrispondenze con la destra
⟗)
FULL OUTER JOIN ( =⨝= oppure
Operatori binari
Il left join fa una combinazione tra Full Outer join ( =⨝=)
●
2 tabelle mostrando anche E
tabella di destra RIGHT e sinistra
LEFT che non hanno R = tabella1 =⨝= tabella2
corrispondenze
OUTER JOIN SELECT * FROM tabella1 t1
FULL OUTER JOIN tabella2 t2 ON t1.anno = t2.anno
Nota: non esiste in MySql! SELECT * FROM tabella1 t1
LEFT JOIN tabella2 t2 ON t1.anno = t2.anno
Si può fare così: UNION
SELECT * FROM tabella1 t1 RIGHT JOIN tabella2 t2 ON
t1.anno = t2.anno
⟗)
FULL OUTER JOIN ( =⨝= oppure Il left join fa una combinazione tra 2 tabelle
mostrando anche le tabelle di sinistra LEFT e di
destra RIGHT che non hanno corrispondenze
SEMI JOIN ⋉
( ) ⋉
R = tabella1 ( ) tabella2
Il semi join mostra solo
informazioni della tabella
indicata, l'altra non la fa vedere
LEFT SEMI JOIN LEFT ANTI SEMI JOIN
RIGHT SEMI JOIN RIGHT ANTI SEMI JOIN
SEMI JOIN ⋉
( ) ⋉
R = tabella1 ( ) tabella2
LEFT SEMI JOIN
SELECT * FROM tabella1 t1
WHERE t1.nome IN (SELECT nome FROM tabella2)
RIGHT SEMI JOIN
SELECT * FROM tabella2 t2
WHERE t2.nome IN (SELECT nome FROM tabella1)
SEMI JOIN ⋉
( ) ⋉
R = tabella1 ( ) tabella2
LEFT ANTI SEMI JOIN
SELECT * FROM tabella1 t1
WHERE t1.nome NOT IN (SELECT nome FROM tabella2)
RIGHT ANTI SEMI JOIN
SELECT * FROM tabella2 t2
WHERE t2.nome NOT IN (SELECT nome FROM tabella1)
SELF JOIN ( ⨝) Operatori binari
Il left join fa una combinazione tra SELF join ( ⨝)
●
se stessa, usando due istanze
uguali della stessa tabella R = tabella1 tabella1
⨝
SELECT * FROM tabella1 t1, tabella1 t2
WHERE t1.anno = t2.anno
Attenzione:
t1 e t2 questa volta sono alias sempre della tabella1 !
SELF JOIN ( ⨝) SELECT * FROM tabella1 t1, tabella1 t2
Cerchiamo le persone nella stessa tabella, nate WHERE t1.anno = t2.anno
nello stesso anno: ⇒
MA NON FUNZIONA! APPLICHIAMO UN MIGLIORAMENTO
SELF JOIN ( ⨝)
Aggiungiamo ad esempio la condizione che gli id siano SELECT * FROM tabella1 t1, tabella1 t2
WHERE t1.anno = t2.anno
diversi: AND t1.id <> t2.id AND t1.id <> t2.id
In SQL <> significa DIVERSO
ANCORA NON FUNZIONA BENE !
⇒ APPLICHIAMO UN MIGLIORAMENTO DIVERSO
SELF JOIN ( ⨝)
Aggiungiamo questa condizione: SELECT * FROM tabella1 t1, tabella1 t2
WHERE t1.anno = t2.anno
AND t1.nome > t2.nome AND t1.nome > t2.nome