Torna alla pagina di Basi di Dati
:: Basi di Dati: temi d'Esame
3 novembre 2006
AUTORE (ID Nome, Cognome)
ARTICOLO(ID, Titolo, NumPagine, NomeRivista, NumRivista, Data)
PUBBLICA (IDAutore, IDArticolo)
Algebra
Determinare il nome di tutte le riviste dove ha pubblicato un articolo di almeno 5 pagine il professor Mario Rossi
Seleziono Mario Rossi dalla tabella Autore e faccio il join con PUBBLICA per sapere l'ID dell'articolo che ha pubblicato
MR:=πIDArticolo(PUBBLICA |X|IDAutore=ID(σNome='Mario' ^ Cognome='Rossi'AUTORE)
Join tra MR e Articolo. Da questa tabella seleziono le tuple che hanno NumPagine >5 e ne proietto l nome rivista
RISULTATO:= πNomeRivista(σNumPagine>=5(MR |X|ID=IDArticoloARTICOLO))
Determinare nome e cognome degli autori che non hanno alcuna pubblicazione che superi le 20 pagine
Join tra PUBBLICA e ARTICOLO. Seleziono le tuple docve NumPagine >20 e ne proietto l'IDArticolo
PMA20:=πIDarticolo(σNumPagine>20(PUBBLICA|X|IDArticolo=IDARTICOLO))
Ora prendo l'IDArticolo di tutte le pubblicazioni
TUTTI:=πIDArticolo(PUBBLICA)
Ora tutti - quelli che hanno pubblicato + di 20 pagine
PMI20:=TUTTI - PMA20
Join tra coloro che hanno pubblicato meno di 20 pagine e AUTORE per proiettare nome e cognome
RISULTATO:=πNome, Cognome(PMI20 |X|IDAutore=IDAUTORE)
SQL
Determinare nome e cognome degli autori che hanno pubblicato almeno un articolo sulla rivista "ACM"
SELECT Nome,,Cognome
FROM Autore JOIN Pubblica ON ID=IDAutore
JOIN Articolo ON ID=IDArticolo
WHERE NomeRivista='ACM'
Determinare il nome delle riviste che tra il 9 febbraio 2004 e il 12 settembre 2006 hanno pubblicato il maggior numero di pagine
SELECT DISTINCT NomeRivista
FROM Articolo
WHERE Data BETWEEN 09/02/2004 AND 12/09/2006
GROUP BY NomeRivista
HAVING SUM(NumPagine)>=ALL
(SELECT SUM(NumPagine)
FROM Articolo
WHERE Data BETWEEN 09/02/2004 AND 12/09/2006
GROUP BYNomeRivista)
schema E-R
Torna alla pagina di Basi di Dati