1. Esercizio
Dato il seguente schema relazionale:
STUDENTE (matricola, indirizzo, città, acorso, anno_nascita)
DOCENTE (coddoc, nome, ruolo)
INSEGNAMENTO (codins, coddoc,nome)
FK:coddoc references DOCENTE
ESAME(matricola, codins, coddoc, data, voto)
FK:matricola references STUDENTE
FK: codins, coddoc references INSEGNAMENTO
L’insegnamento è identificato dalla coppia codice insegnamento e codice docente.
Si richiede di scrivere in SQL le seguenti interrogazioni:
1) Selezionare gli studenti che non hanno mai sostenuto esami di nome ‘SIA’
2) Per ogni docente indicare quanti studenti hanno superato l’esame
3) Selezionare gli studenti che non hanno fatto esami del terzo anno di corso
4) Per ogni anno di corso, indicare il numero di esami
5) Indicare il voto medio degli esami sostenuti nel 2008
6) Per ogni anno di nascita indicare la media dei voti d’esame
7) Contare per ogni città quanti studenti ci sono
2. 1. Selezionare gli studenti che non hanno mai sostenuto esami di nome ‘SIA’
SELECT STUDENTE.*
FROM STUDENTE
WHERE MATRICOLA NOT IN (SELECT MATRICOLA
FROM ESAME E, INSEGNAMENTO I
WHERE E.CODINS= I.CODINS
AND E.CODDOC=I.CODDOC
AND I.NOME = ‘SIA’)
2. Per ogni docente indicare quanti studenti hanno superato l’esame
SELECT CODDOC, COUNT(*)
FROM ESAME
GROUP BY CODDOC
3. Selezionare gli esami che non sono relativi agli insegnamenti che contengono la parola ‘economia’
SELECT *
FROM ESAME
WHERE (CODINS, CODDOC) NOT IN (SELECT CODINS,CODDOC
FROM INSEGNAMENTO
WHERE NOME LIKE ‘%ECONOMIA%’)
SU ACCESS
SELECT E1.*
FROM ESAME E1
Where NOT EXISTS (SELECT *
FROM INSEGNAMENTO I
WHERE I.CODINS=E1.CODINS
AND I.CODDOC = E1.CODDOC
AND I.NOME LIKE ’*ECONOMIA*’)
4. Per ogni anno di corso, indicare il numero di esami
SELECT S.ACORSO, COUNT(*)
FROM STUDENTE S, ESAME E
WHERE E.MATRICOLA=S.MATRICOLA
GROUP BY S.ACORSO
5. Indicare il voto medio degli esami sostenuti nel 2008
SELECT AVG(VOTO)
FROM ESAME
WHERE DATA > 1-1-2008
(AND DATA < 31-12-2008)
6. Per ogni anno di nascita indicare la media dei voti d’esame
SELECT ANNO_NASCITA, AVG(VOTO)
FROM STUDENTE S, ESAME E
WHERE E.MATRICOLA=S.MATRICOLA
GROUP BY ANNO_NASCITA
3. 7. Contare per ogni città quanti studenti ci sono
SELECT CITTA, COUNT(*)
FROM STUDENTE
GROUP BY CITTA