Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Basi di dati ~ comunicazione digitale
 
interrogazione postgres
Clicca QUI per vedere il messaggio nel forum
kyuss
A proposito di un'interrogazione riportata negli esercizi di laboratorio del Valtolina sulla base di dati in allegato:

2. la media dei voti registrati presso il corso di laurea di informatica;

Che differenza c'è fra queste due interrogazioni?

SELECT AVG(voto) FROM esami JOIN corsi ON corso=corsi.id JOIN corsidilaurea ON corsodilaurea=corsidilaurea.id WHERE corsidilaurea.denominazione='Informatica'

oppure

SELECT AVG(voto) FROM esami JOIN studenti ON matricola=studente JOIN corsidilaurea ON corsodilaurea=id WHERE denominazione='Informatica'


Secondo me dovrebbero portare entrambe allo stesso risultato, ma non è così.


Grazie.

altin
devi partire dal codice a creare la schema relazionale,e da li devi penso che devi guardare le cardinalita delle entita e delle associazioni.
a me come entita mi sono uscite Professore,Studenti,Corsi,CorsiDiLaurea e Esami(qui avevo un dubbio ma visto che pure data fa parte della chiave primaria e le altre due li prendi matricola-->da Studenti e Id-->Corso per questo pure esame è entita.
a me l'unica associazione mi esce PianoDiStudio con cardinalita (n,n).ritornando alla tua domanda.
allora io ho fatto cosi::
ho Studenti(0,n)--FA--(0,1)Esame
cioè un studente può fare un esame ma ne puo fare n di esami. e l'esame di quella data puo essere o no svolto dallo studente.
Esami(0,1)--fa parte--(1,n)Corsi un esame puo fare parte di un corso o no , e un corso puo avere un esame o n esami("qui ho un dubbio sulla cardinalita da parte dei Esame ma penso che sia giusta")


Corsi(1,1)--fa parte--(1,n)(CorsoDiLaurea)
un corso fa parte di uno e un corso di laurea,e un CorsoDiLaurea puo avere da 1 a n corsi

altin
se faqi caso alle cardinalita puo capire che dalla prima query che:
SELECT AVG(voto) FROM esami JOIN corsi ON corso=corsi.id JOIN corsidilaurea ON corsodilaurea=corsidilaurea.id WHERE corsidilaurea.denominazione='Informatica'

il rpimo join fra Esami e Corsi puo darti solo i studenti di quell esame in quella data ("qui noti che nn tieni conto dei studenti che nn hanno partecipato").
il secondo join fra Corsi e CorsiDiLaurea lo fai per ricavare quelli del informatica.

altin
ho sbagliato sopra..ripetto tutto scusa

altin
la differenza sta che nella prima tu puoi recuperare le medie dei esami di un corso della facolta di informatica.

nella seconda tu selezioni tutti i studenti che hanno fatto un certo esame della facolta di informatica e su qeusti esami vai a recuperare la media("fai atenzione xke qui puoi avere dei studenti che non hanno fatto nessun esame che fanno parte della facolta di informatica",da qui puoi capire ch eperdi la media dei esami che dei studenti non hanno fatto.)suponi che devi fare l'esame di programmazione e di statistica.hai dei studenti che hanno partecipato solo al esame di programmazione.con il secondo query tu fai il join tra studente e esame("significa che prendi in considerazione solo gli esami che lo studente ha partecipato e non tutti gli altri").se quel studente che ha fatto programmazione non ha fatto statistica vuol dire se tu fai join tra studente e corso non puoi recuperare l'esame di statistica.
o meglio imagina che l'esame di statistica e del 3 anno e programmazione del 1.hai dei studenti del secondo anno.se fai join dei studenti con gli esami vedi subito che statistica del 3 anno non lo ha fatto nessuno xke sono tutti del secondo anno.
tu puoi avere che ad un esame nn ha partecipato nessuno

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate