Corso di Informatica (parte DB) - ing. Gestionale SVOLGIMENTO PROVA PRATICA DEL 17/12/2009 Il db da utilizzare e' quello denominato "dbfatture" presente sul sito del corso. --------------------------- Domanda_1: Elencare id_cliente e rag_sociale dei clienti residenti in cittą il cui nome contiene sia la lettera 'a', sia la lettera 'l' (elle). CREATE OR REPLACE VIEW risposta_1 AS SELECT c.id_cliente, c.rag_sociale FROM clienti c WHERE c.citta LIKE '%a%' AND c.citta LIKE '%l%'; --------------------------- Domanda_2: Per ogni ditta, indicare rag_sociale e importo totale fatturato. Fornire tale elenco in ordine decrescente di importo fatturato. CREATE OR REPLACE VIEW risposta_2 AS SELECT d.id_ditta, d.rag_sociale, sum(a.costo_unitario * rf.quantita_articolo) AS fatturato FROM ditte d JOIN righe_in_fattura rf ON d.id_ditta = rf.id_ditta JOIN articoli a ON (rf.sku_art_venduto = a.sku AND rf.id_ditta = a.id_ditta) GROUP BY d.id_ditta, d.rag_sociale ORDER BY sum(a.costo_unitario * rf.quantita_articolo) DESC; --------------------------- Domanda_3: Trovare gli articoli di cui sono stati vendute almeno 100 unitą. CREATE OR REPLACE VIEW risposta_3 AS SELECT a.id_ditta, a.sku, a.descrizione FROM righe_in_fattura rf INNER JOIN articoli a ON (rf.sku_art_venduto = a.sku AND rf.id_ditta=a.id_ditta) GROUP BY a.id_ditta, a.sku, a.descrizione HAVING SUM(rf.quantita_articolo) >= 100; --------------------------- Domanda_4: (opzionale) Definire un indice che permetta di velocizzare l'esecuzione della query 2. Si puo', per esempio, definire un indice che permetta di eseguire in modo piu' efficiente il join tra la tabella "fatture" e la tabella "ditte". Visto che in "ditte" il campo "id_ditta" e' chiave primaria (e quindi su di esso esiste gia' un indice implicito), l'indice lo definiremo sul campo "id_ditta" di "fatture". Inoltre, dato che tale indice deve supportare un join e non una condizione riguardo ad un intervallo di valori, possiamo scegliere un indice hash. In definitiva: CREATE INDEX index_risposta_4 ON fatture USING hash(id_ditta);