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:
IdInsegnante |
Cognome |
Nome |
1 |
Gussoni |
Mario |
2 |
Orlandi |
Maurizio |
3 |
Rossetti |
Franco |
4 |
Stiavell |
Gabriella |
|
Passiamo poi a inserire i dati nella tabella Alunno:
IdAlunno |
Cognome |
Nome |
1 |
Rossi |
Mario |
2 |
Verdi |
Eliabetta |
3 |
Bianchi |
Andrea |
4 |
Vitale |
Graziano |
5 |
Buzzi |
Marco |
6 |
Galli |
Roberto |
7 |
Frare |
Cesare |
8 |
Saba |
Marco |
9 |
Picozzi |
Attilio |
10 |
Api |
Moreno |
11 |
Saccozza |
Gaetano |
12 |
Pistone |
Mario |
|
|
|
La tabella Corso viene compilata coi seguenti valori:
IdCorso |
Nome |
XidInsegnante |
1 |
AutoCad |
2 |
2 |
Photoshop |
4 |
3 |
Excel |
1 |
4 |
Flash |
4 |
5 |
Word |
2 |
6 |
Powerpoint |
4 |
7 |
Access |
3 |
8 |
Java |
3 |
|
Da ultimo la tabella Iscrizione dovrà avere il seguente aspetto:
XidAlunno |
XidCorso |
1Rata |
2Rata |
1 |
2 |
Sì |
No |
1 |
5 |
No |
No |
2 |
1 |
Sì |
No |
2 |
6 |
Sì |
No |
3 |
2 |
No |
No |
3 |
7 |
No |
No |
4 |
1 |
Sì |
No |
5 |
2 |
No |
No |
6 |
1 |
No |
No |
6 |
8 |
No |
No |
7 |
3 |
No |
No |
7 |
8 |
Sì |
No |
8 |
4 |
No |
No |
9 |
3 |
No |
No |
9 |
7 |
No |
No |
10 |
4 |
Sì |
No |
10 |
3 |
Sì |
No |
11 |
5 |
No |
No |
12 |
6 |
No |
No |
12 |
2 |
Sì |
No |
|
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.
(nel nostro caso, inseriamo 'Gussoni' nella maschera di inserimento)
|
|
|
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
( nel nostro caso, inseriamo 'Rossetti' nella maschera di
immissione )
|
|
|
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'; |
Cognome |
Nome |
Verdi |
AutoCad |
Vitale |
AutoCad |
Galli |
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';
|
Cognome |
Nome |
Gussoni |
Excel |
Rossetti |
Access |
|
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'; |
Cognome |
Nome |
Rossi |
Photoshop |
Bianchi |
Photoshop |
Buzzi |
Photoshop |
Saba |
Flash |
Api |
Flash |
Pistone |
Powerpoint |
Verdi |
Powerpoint |
Pistone |
Photoshop |
|
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; |
Cognome |
Nome |
Galli |
AutoCad |
Bianchi |
Photoshop |
Buzzi |
Photoshop |
Frare |
Excel |
Picozzi |
Excel |
Saba |
Flash |
Saccozza |
Word |
Rossi |
Word |
Pistone |
Powerpoint |
Galli |
Java |
Bianchi |
Access |
Picozzi |
Access |
|
|