vuoi
o PayPal
tutte le volte che vuoi
Esercizio 4
Cliente (ID_CLIENTE, nome, cognome) /* Questa tabella memorizza i dati dei clienti che frequentano il centro sportivo.
ID_CLIENTE è la chiave primaria. */
Palestra (ID_PALESTRA, nome, indirizzo) /* Questa tabella contiene informazioni sull’elenco delle palestre appartenenti alla
catena. ID_PALESTRA è la chiave primaria della tabella. /*
Ingresso(ID_cliente, ID_palestra, data) /* Questa tabella memorizza gli ingressi degli utenti nelle palestre. ID_cliente e
ID_palestra sono delle foreign key che fanno riferimento alle tabelle rispettivamente Cliente e Palestra. Questa tabella non ha
un attributo singolo che svolge il ruolo di chiave primaria. Per vostra semplicità assumente che un utente vada in palestra non
più di una volta al giorno. */
/*Assunzioni*/
un utente va in palestra non più di una volta al giorno
/*visualizzo nella query*/
l'id_cliente
l’id_palestra
il valore numerico della percentuale.
select b.id_cliente, b.id_palestra, b.ing / a.tot as perc
from( select id_cliente; count(*) as tot
from ingresso
group by id_cliente
)as a,( select id_cliente; id_palestra count(*) as ing
from ingresso
group by id_cliente,id_palestra
)as b
where a.id_cliente=b.id_cliente
la query utilizza due subquery nel from che calcolano separamente gli inglessi effettuati dal cliente su ogni singola tabeella e
l’altra invece mi calcola il numero totale degli ingressi di ciascun cliente
Esercizio 5
Elettrodomestico (NUMERO_SERIALE, descrizione, prezzo, ID_categoria) /* Questa tabella memorizza i dati degli
elettrodomestici venduti. NUMERO_SERIALE è la chiave primaria, il numero seriale di un elettrodomestico è come la targa di
un’automobile. Prezzo è il prezzo di vendita e ID_categoria è una foreign key che rimanda alla tabella categoria (vedi tabella
successiva). */
Categoria (ID_categoria, descrizione) /* Memorizza informazioni sulle categorie in cui sono suddivisi gli elettrodomestici. Ogni
elettrodomestico appartiene ad una e una sola categoria. */
Manutenzione(ID_MANUTENZIONE, Numero_Seriale, data, costo) /* Ogni recordi questa tabella rappresenta un intervento di
manutenzione effettuato su un eletrodomestico. ID_MANUTENZIONE è la chiave primaria della tabella, Numero_Seriale è una
foreign key che fa riferimento alla tabella elettrodomestico, data è la data dell’intervento e costo rappresenta la spesa
effettuata dall’azienda per svolgere la manutenzione. Un elettrodomestico può aver subito zero, una o più manutenzioni.
tot soldi spesi
tot soldi incassati
rap 1-2
rap> 0.05
order by rap desc
select id_categorie, b.tot_speso/a.tot_incasso as rap
from( select id_categoria, sum(prezzo) as tot_incasso
from elettrodomestico
group by id_categoria
) as a,(
selecte. id_categoria, sum(m,costo) as tot_speso
from elettrodomestico as e , manutenzione as m
where m.numero_seriale=e.numero_seriale
group by id_categoria
)as b
where b.id_categoria=a.id_categoria and rap > 0.05
order by rap desc
Esercizio 6
Viaggio (ID_VIAGGIO, partenza, destinazione, data)
Treno (ID_TRENO, nome, costo_orario)
Container (ID_CONTAINER, dimensioni, peso)
Commessa (ID_COMMESSA, ID_container, ID_viaggio, importo)
per ogni viaggio
1- rapporto tra soldi incassati tramite la fatturizzazione dei conteiner trasportati/costo sostenuto per i treni utilizzati
2-mostro solo i dati che hanno un rapporto >2
3-order by rapporto desc
select a.id_viaggio, a.incasso/b.fatt as rap
from( select id_viaggio, sum(importo) as incasso
from commessa
group by id_viaggio
) as a,(
select t.id_viaggio, sum(costo_orario*ore_impiegate) as fatt
from uso_treno as us, treno as t
where us.id_treno=t.id_treno
group by id_viaggio
) as b
where a.id_viaggio=b.id_viaggio and rap>2
order by rap desc
Questo esercizio ci chiede di andare a calcolare per ogni ***** , il totale oppure il rapporto ecc, tuttavia per per andare a calcolarle non si
può andare subito a collegare le informazioni delle diverse tabelle in quanto hanno diversa granularità ( ossia l'insieme delle chiavi
associate ad una unità di informazione ) quindi per collegare le informazioni ho bisogno di uniformare la granularità ricorrendo alle query
annidate che oltre a operare su tabelle esistenti mi permettono di lavorare a partire dai risultati di altre sotto-query come se fossero
tabelle esistenti . In alternativa avremmo potuto usare anche la materializzazione e le viste.
/*Alternative*/
In alternativa avremmo potuto utilizzare la materializzazione (CREATE TABLE nome_tabella1 query;...)
Vantaggi
- può migliorare le prestazioni nel caso di interrogazioni frequenti su dati stabili,