Esercizio SQL della Biblioteca

La biblioteca

Si consideri questo schema:

Utenti (cod-utente, nome, cognome)

Libri (cod-libro, titolo, autore)

Prestiti (cod-prestito, fkcod-utente, fkcod-libro, data-inizio, data-fine)

1) Elenco dei libri:

SELECT titolo, autore

FROM Libri;

2) Elenco dei libri prestati all’utente “Gernone”

SELECT titolo, autore

FROM Utenti, Libri, Prestiti

WHERE fkcod-utente=cod-utente

AND fkcod-libro=cod-libro

AND cognome=”GERNONE”;

3)  Come la query 2, ma con data (di inizio) in ordine cronologico inverso

SELECT titolo, autore, data-inizio

FROM Utenti, Libri, Prestiti

WHERE fkcod-utente=cod-utente

AND fkcod-libro=cod-libro

AND cognome=”GERNONE”

ORDER BY data-inizio DESC;

4) Elenco degli utenti con i titoli di libro che non hanno restituito il libro

SELECT nome, cognome, titolo

FROM Utenti, Libri, Prestiti

WHERE fkcod-utente=cod-utente

AND fkcod-libro=cod-libro

AND data-fine IS NULL;

5) Classifica dei libri maggiormente prestati (con più di 2 prestiti)

SELECT titolo, autore, count(*)

FROM Libri, Prestiti

WHERE fkcod-libro=cod-libro

GROUP BY titolo

HAVING count(*) >2

ORDER BY COUNT(*) DESC;

6) Elenco dei libri con prestito maggiore di 15 gg. Usare DATEDIFF (‘d’, data-inizio, data-fine)

SELECT titolo, autore

FROM Utenti, Libri, Prestiti

WHERE fkcod-libro=cod-libro

AND data-fine IS NOT NULL

AND datediff(‘d’, data-inizio, data-fine)>15;