Esercizio SQL

di il
7 risposte

Esercizio SQL

Salve a tutti , sono blocatto sul seguente esercizio d'esame di Basi:
Ho le seguenti entità:
Insegnamento (Num_insegnamento,Cod_docente,Aula,Argomento)

Docenti(Cod_docente,nome,cognome,n_ufficio,n_telefono)

Frequenta(Num_insegnamento,matricola)

Num_insegnamento è PK di insegnamento , Cod_docente è FK
Cod_docente è PK di docente
La combinazione (Num_insegnamento,matricola) è PK per frequenta.
Ogni insegnante può tenere piu insegnamenti ma un insegnamento può essere tenuto da un solo insegnante

Si chiede di determinare tramite opportune query SQL :
- Tutti gli studenti che seguono tutte le lezioni del prof Cecconi e nessuna del prof Rossi.

Se qualcuno me lo risolve o mi da dei suggerimenti sarebbe ottimo. Grazie

7 Risposte

  • Re: Esercizio SQL

    Non mi risulta che in questo forum si facciano i compiti per gli altri.
    Se speri di superare un esame in questo modo... Auguri!
  • Re: Esercizio SQL

    Come scritto da gibra non si risolvono esercizi completi.

    Comunque ti servono, in ordine sparso COUNT, GROUP BY, NOT IN e HAVING.
  • Re: Esercizio SQL

    Ma non capisco allora a che serve un forum? Non ci voleva molto a capire quali funzioni usare , è come combinarle il problema. Secondo non chiedo come si dice nel regolamento "la pappa pronta" perchè ho ben provato a risolvere l'esercizio da me. Terzo si tratta di un testo d'esame vecchio , non violerete qualche codice universitario nel risolverlo ,non mi state "aiutando a passare l'esame" ma a risolvere un esercizio a caso. Almeno darmi una descrizione a parole della soluzione del problema , ripeto a capire di usare le having le aggregate group by e le in non ci voleva molto. Non importa il codice SQL quanto meno un'aiuto che non sia una lista di funzioni , grazie.
  • Re: Esercizio SQL

    Allora se hai provato a farlo posta la query e vediamo cosa non va. Se non ci dai una base, e non ti basta sapere quali funzioni usare, che suggerimenti possiamo darti?
  • Re: Esercizio SQL

    Allora per quanto riguarda quelli che non hanno fatto nessuna lezione con Russi son riuscito. Il problema è quello di selezionare gli studenti che hanno fatto tutti gli esami di Cecconi. La mia idea era di fare una lista di tutti gli studenti che seguono almeno un corso con Cecconi e il relativo corso, per ciascuno studente contare il numero di corsi con Cecconi (quindi Count(corso) groupby(matricola)) e confrontarli con il numero di corsi(precedentemente conteggiati) del prof Cecconi. Una volta fatto sottraggo con EXCEPT tutti quelli che hanno fatto anche qualcosa con Russi e dovrebbe venire. Questo è il problema, tenere in qualche modo "memorizzato" il numero di lezioni di Cecconi e confrontarlo con le lezioni che gli studenti seguono di Cecconi (per vedere se sono uguali e quindi le seguono tutte). Dopo provo anche a scrivere quello che riesco di codice SQL.
  • Re: Esercizio SQL

    Gli operatori insiemistici sono visti male da alcuni prof, quando ci sono alternative, e in questo caso l'alternativa è usare NOT IN.
    Dunque, per prima cosa si effettua il più possibile una scrematura nella clausola WHERE, selezionando così gli studenti che hanno seguito almeno un corso di Cecconi e nessun corso di Rossi (ovvero quelli che NON SONO TRA gli studenti che hanno seguito almeno un corso di Rossi).
    Ora, ad ogni studente del result set parziale sono associati solo corsi di Cecconi, quindi puoi contarli con un COUNT(*) dopo aver aggregato le tuple con la GROUP BY matricola.
    Per confrontare questo conteggio con il totale dei corsi di Cecconi, e selezionare solo gli studenti che hanno seguito tutti i corsi, devi sfruttare la clausola HAVING.

    Quindi hai bisogno di 2 query nidificate, una nella where e una nella having.
  • Re: Esercizio SQL

    Perfetto credo di aver capito grazie
Devi accedere o registrarti per scrivere nel forum
7 risposte