edutecnica



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 No
1 5 No No
2 1 No
2 6 No
3 2 No No
3 7 No No
4 1 No
5 2 No No
6 1 No No
6 8 No No
7 3 No No
7 8 No
8 4 No No
9 3 No No
9 7 No No
10 4 No
10 3 No
11 5 No No
12 6 No No
12 2 No

 


q1:Conteggiare dalla tabella Iscrizioni il numero di [1Rata] gia pagate.

   
SELECT count(*) AS TOTALE
FROM Iscrizione
WHERE Iscrizione.[1Rata]<>0;
TOTALE
8

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:];
TOTALE
1

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';
Nome
Access
Java

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

 








edutecnica