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’.