Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Banca del tempo 2

Precedente
SUPERIORE
Successiva

Quando viene svolto un servizio si registrano i dati del socio "donatore", del socio "ricevitore" e la prestazione (oltre che la data e le ore)

Diagramma E/R

Schema relazionale esteso

Tra E/R e relazionale differiscono alcuni nomi...

Query

Chi può svolgere una prestazione in una zona

SELECT SOCIO.*
FROM ZONA INNER JOIN (SOCIO INNER JOIN ((CATEGORIA INNER JOIN PRESTAZIONE
  ON CATEGORIA.IDcategoria = PRESTAZIONE.categoriaID) INNER JOIN SOCIO_CATEGORIA
  ON CATEGORIA.IDcategoria = SOCIO_CATEGORIA.categoriaID)
  ON SOCIO.IDsocio = SOCIO_CATEGORIA.socioID) ON ZONA.IDzona = SOCIO.zonaID
WHERE (PRESTAZIONE.Descrizione = [scegli la prestazione]) AND
  (ZONA.Descrizione = [scegli la zona]);

Classifica per ore ricevute

SELECT IDsocio, Nome, Cognome, Sum(Ore) AS [Ore ricevute]
FROM SOCIO INNER JOIN LAVORO ON (SOCIO.IDsocio = LAVORO.a_socioID)
GROUP BY IDsocio, Nome, Cognome
ORDER BY Sum(Ore) DESC;

Classifica per ore prestate

SELECT IDsocio, Nome, Cognome, Sum(Ore) AS [Ore prestate]
FROM SOCIO INNER JOIN LAVORO ON (SOCIO.IDsocio = LAVORO.da_socioID)
GROUP BY IDsocio, Nome, Cognome
ORDER BY Sum(Ore) DESC;

Classifica per prestazioni

SELECT IDprestazione, PRESTAZIONE.Descrizione, Sum(LAVORO.Ore) AS SommaDiOre
FROM PRESTAZIONE INNER JOIN LAVORO ON (PRESTAZIONE.IDprestazione = LAVORO.prestazioneID)
GROUP BY IDprestazione, PRESTAZIONE.Descrizione
ORDER BY Sum(LAVORO.Ore) DESC;

Chi ha diritto a una prestazione

SELECT SOCIO.* 
FROM SOCIO
WHERE (SELECT Sum(LAVORO.Ore) AS SommaDiOreDa
       FROM LAVORO
       WHERE (LAVORO.da_socioID=SOCIO.IDsocio)) >
      (SELECT Sum(LAVORO.Ore) AS SommaDiOreA
       FROM LAVORO
       WHERE (LAVORO.a_socioID=SOCIO.IDsocio));

Chi svolge altre attività oltre a SEGRETERIA

SELECT SOCIO.*
FROM SOCIO INNER JOIN (CATEGORIA INNER JOIN SOCIO_CATEGORIA
  ON CATEGORIA.IDcategoria = SOCIO_CATEGORIA.categoriaID) ON SOCIO.IDsocio = SOCIO_CATEGORIA.socioID
WHERE (CATEGORIA.Descrizione = "SEGRETERIA") AND
  (SOCIO.IDsocio In (SELECT SOCIO.IDsocio
                     FROM SOCIO INNER JOIN (CATEGORIA INNER JOIN SOCIO_CATEGORIA
                       ON CATEGORIA.IDcategoria = SOCIO_CATEGORIA.categoriaID)
                       ON (SOCIO.IDsocio = SOCIO_CATEGORIA.socioID)
                     WHERE (CATEGORIA.Descrizione <> "SEGRETERIA")));

Banca del tempo 2 - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva