Esercizio no.7:soluzione
Diamo subito un possibile diagramma.
Dove si evidenzia la relazione molti-molti fra le entità Alunno
e Corso, verrà dunque introdotta una tabella intermedia: Iscrizione
.
La relazione molti-molti fra Alunno e Corso sarà dunque risolta
dalla relazione, uno-molti fra le entità Alunno e iscrizione e la
relazione, uno molti fra le entità Corso e iscrizione.
Inoltre, ogni insegnante potrà condurre più corsi.
Il disegno sopra illustra il diagramma concettuale che descrive
il problema.
Il diagramma logico che ne consegue è il seguente.
Le chiamate che ci permettono di costruirlo sono le seguenti:
CREATE TABLE Alunno ( IdAlunno COUNTER PRIMARY KEY, Cognome CHAR(20), Nome CHAR(20)); |
CREATE TABLE
Insegnante ( IdInsegnante COUNTER PRIMARY KEY, Cognome CHAR(20), Nome CHAR(20)); |
CREATE TABLE Corso (
IdCorso COUNTER PRIMARY KEY,
Nome CHAR(20),
XidInsegnante INTEGER REFERENCES Insegnante(IdInsegnante));
CREATE TABLE Iscrizione (
XidAlunno INTEGER REFERENCES Alunno(IdAlunno),
XidCorso INTEGER REFERENCES Corso(IdCorso),
1Rata BIT,
2Rata BIT);
Anche la tabella Insegnante deve essere riempita coi seguenti valori:
|
Passiamo poi a inserire i dati nella tabella Alunno:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
La tabella Corso viene compilata coi seguenti valori:
|
Da ultimo la tabella Iscrizione dovrà avere il seguente aspetto:
|
q1:Conteggiare dalla tabella Iscrizioni il numero di [1Rata] gia pagate. |
|||
SELECT count(*) AS TOTALE
FROM Iscrizione WHERE Iscrizione.[1Rata]<>0; |
|
q2:Conteggiare il numero di corsi tenuti da uno specifico
insegnante. |
|||
SELECT COUNT (*) AS TOTALE
FROM Corso, Insegnante WHERE Corso.XidInsegnante=Insegnante.IdInsegnante AND Insegnante.Cognome=[Cognome:]; |
|
q3:Individuare quali sono i corsi tenuti da uno specifico
insegnante |
||||
SELECT Corso.Nome FROM Corso,Insegnante WHERE [Corso].[XIdInsegnante]=[Insegnante].[IdInsegnante] AND [Insegnante].[Cognome]='Rossetti'; |
|
q4:Individuare tutti gli alunni che sono iscritti ad uno specifico corso ( nel nostro caso, quelli iscritti al corso di Autocad) |
|||||||||
SELECT Alunno.Cognome,
Corso.Nome FROM Iscrizione,Alunno,Corso WHERE Alunno.IdAlunno=Iscrizione.XIdAlunno AND Corso.IdCorso=Iscrizione.XidCorso AND Corso.Nome='Autocad'; |
|
q5:Individuare tutti gli insegnanti e i corsi che hanno un alunno specificato. ( nel nostro caso, l'alunno Picozzi) |
|||||||
SELECT Insegnante.Cognome,
Corso.Nome FROM Corso, Insegnante, Iscrizione, Alunno WHERE Insegnante.IdInsegnante=Corso.XIdInsegnante AND Iscrizione.XidCorso=Corso.IdCorso AND Alunno.IdAlunno=Iscrizione.XIdAlunno AND Alunno.Cognome='Picozzi'; |
|
q6:Individuare tutti gli alunni che hanno un dato insegnante e dire a quali corsi sono iscritti ( nel nostro caso,l'insegnante è Stiavell ) |
|||||||||||||||||||
SELECT Alunno.Cognome,
Corso.Nome FROM Iscrizione, Alunno, Corso, Insegnante WHERE Iscrizione.XidAlunno=Alunno.IdAlunno AND Iscrizione.XidCorso=Corso.IdCorso AND Insegnante.IdInsegnante=Corso.XIdInsegnante AND Insegnante.Cognome='Stiavell'; |
|
q7: Individuare tutti gli alunni che non hanno ancora pagato la prima rata e dire a quale corso sono iscritti |
|||||||||||||||||||||||||||
SELECT Alunno.Cognome,
Corso.Nome FROM Iscrizione, Corso, Alunno WHERE Iscrizione.XidAlunno=Alunno.IdAlunno AND Iscrizione.XidCorso=Corso.IdCorso AND Iscrizione.[1Rata]=0; |
|