ESAME DB 29/09/2005
Prof. Giovanni Giuffrida
PRIMO MODULO (DB1)
NON DIMENTICATE IL NOME E LA MATRICOLA
Nome ________________________________________ Matricola: ___________________
INDICATE COSA DOVETE REGISTRARE
DB 9cfu
DB1 6cfu
DB2 6cfu
Punteggio finale (questa parte verrà riempita dal docente): 1.1:
1.1)
1.2.a:
Altro: __________
1.2.b:
1.2.c:
1.3.a:
1.3.b:
Algebra Relazionale
[5 punti] Considera le seguenti relazioni: studente( nome, casa_id), coppia( nome1, nome2). Scrivere una
espressione in algebra relazionale per identificare tutte le coppie di studenti che non vivono nella stessa casa. Usate la notazione
lineare. E’ importante dare la risposta in forma chiara e facilmente leggibile.
1.2)
Algebra Relazionale e SQL
Nelle seguenti espressioni in algebra relazionale e SQL le relazioni considerate sono R(a,b) e S(b,c).
A) [7 punti] Considera le seguenti due query:
Q1: πa,b (R JOIN S)
Q2: R  ( ρ a ← c ( π c (S)) x π b (S))
B) [4 punti] Considera le seguenti due query:
Q1:SELECT a
FROM R
WHERE b >= ALL( SELECT b FROM S WHERE c=5);
Q2:SELECT a
FROM R
WHERE b >= ANY( SELECT b FROM S WHERE c=5);
C) [4 punti] Considera le seguenti due query:
Q1:
SELECT DISTINCT a
FROM R
WHERE b > 0;
Q2:
1.3)
SELECT a
FROM R
WHERE b > 0
GROUP BY a;
Indica l’affermazione corretta:
(a) Q1 e Q2 restituiscono lo stesso risultato
(b) Il risultato di Q1 e’ sempre contenuto nel risultato di Q2
(c) Il risultato di Q2 e’ sempre contenuto nel risultato di Q1
(d) Q1 e Q2 restituiscono due risultati diversi
Indica l’affermazione corretta:
(a) Q1 e Q2 restituiscono lo stesso risultato
(b) Il risultato di Q1 e’ sempre contenuto nel risultato di Q2
(c) Il risultato di Q2 e’ sempre contenuto nel risultato di Q1
(d) Q1 e Q2 restituiscono due risultati diversi
Indica l’affermazione corretta:
(a) Q1 e Q2 restituiscono lo stesso risultato
(b) Il risultato di Q1 e’ sempre contenuto nel risultato di Q2
(c) Il risultato di Q2 e’ sempre contenuto nel risultato di Q1
(d) Q1 e Q2 restituiscono due risultati diversi
SQL
A) [6 punti] Considera il seguente schema: studente(Matricola,MediaVoti), pratica(Matricola,sport)e la
seguente query:
select sport
from Studente s, Pratica p
where s.matricola=p.matricola
group by sport
having min(MediaVoti) < 20
Scrivere una query SQL equivalente a quella data che non usi la clausola HAVING.
B) [5 punti] Una relazione R(a,b,c) contiene delle tuple duplicate. Puoi scrivere un comando DELETE per lasciare una sola tupla di
ogni gruppo di tuple duplicate? Se si, riportare il comando; se no argomentare il perche’.