 |
AL |
Haribo addicted

Registered: Feb 2007
Posts: 601 (0.09 al dì)
Location: Treviso/Milano
Corso: Comunicazione Digitale
Anno:
Time Online: 8 Days, 6:22:02: [...]
Status: Offline
Edit | Report | IP: Logged |
questi son quelli che ho io:
/* 1) Trovare i nomi delle pizze e i prezzi che costano meno di 6 euro */
SELECT nome, prezzo FROM pizza WHERE prezzo < 6
/* 2) Trovare gli ingredienti delle pizze */
SELECT DISTINCT ingrediente FROM ingrediente
/* 3) Trovare cognome, nome e telefono dei clienti che abitano in via dei Girasoli ordinati per nome e cognome */
SELECT cognomec, nomec, telc FROM cliente WHERE via = 'via dei Girasoli' ORDER BY cognomec, nomec
/* 4) Trovare il numero di telefono dei clienti che hanno effettuato un ordine
di almeno 5 pizze nell'ultima settimana, spendendo tra i 20 e i 50 euro*/
SELECT telc FROM ordine
WHERE qta <= 5 AND
importo BETWEEN 20 AND 50 AND
data > (CURRENT_DATE - 7)
/* 5) Trovare il nome delle pizze ordinate in data 4 settembre 2009 */
SELECT nome FROM pizza
NATURAL JOIN ordine
WHERE data = '2009-09-04'
/* 6) Trovare i nominativi dei clienti che hanno ordinato almeno una pizza che contenga le olive di ogni genere,
insieme alla data e all'importo dell'ordine. Presentare il risultato ordinato in modo decrescente rispetto all'importo e,
a parità di importo, in modo crescente per cognome e nome */
SELECT DISTINCT cognomec, nomec, data, importo FROM cliente
NATURAL JOIN ordine
NATURAL JOIN ingrediente
WHERE ingrediente LIKE '%olive%'
ORDER BY importo DESC, cognomec, nomec
/* 7) Trovare i clienti vicini di casa. Due clienti si dicono "vicini di casa" se abitano
nella stessa via e la differenza dei loro numeri civici è minore di 5*/
SELECT c1.*, c2.* FROM
cliente AS c1, cliente AS c2
WHERE c1.via = c2.via AND c1.telc < c2.telc AND
ABS(c1.nciv - c2.nciv) < 5
/* 8) Restituire i dati degli ordini per i quali si è applicato uno sconto(cioè gli ordini per cui l'importo è inferiore
al valore ottenuto moltiplicando la quantità ordinata per il relativo prezzo della pizza). Riportare anche lo sconto effettuato. */
SELECT ordine.*, (qta*prezzo)-importo AS sconto FROM pizza
NATURAL JOIN ordine
WHERE importo < qta*prezzo
/* 9) Produrre l'elenco, in ordine alfabetico, dei clienti. Per quelli che hanno effettuato almeno un ordine, riportare nell'elenco
le informazioni relative all'importo e alla data degli ordini effettuati. Gli ordini dello stesso cliente devono essere ordinati
dalla data più recente. */
SELECT cognomec, nomec, importo, data FROM cliente
NATURAL LEFT JOIN ordine
ORDER BY cognomec, nomec, data DESC
/* 10)Trovare il numero totale, l'importo totale e medio degli ordini degli utenti e quante pizze diverse hanno ordinato. */
SELECT count (*), SUM (importo), AVG (importo), count(distinct codp)
FROM ordine
/* 10bis)Trovare per ogni cliente, il numero totale,l'importo totale e medio dei suoi ordini e quante pizze diverse ha ordinato.*/
SELECT count (*), SUM (importo), AVG (importo), count(distinct codp)
FROM ordine
GROUP BY telc
/* 11) Trovare il nome delle pizze ordinate nel 2010 il cui importo totale ordinato sia stato inferiore alla somma del prezzo per la quantità ordinata.*/
SELECT nome, prezzo, sum(qta), sum (importo) FROM pizza
NATURAL JOIN ordine
WHERE data BETWEEN '2010-1-1' AND '2010-12-31'
GROUP BY nome, prezzo
HAVING sum(importo)<sum(prezzo*qta)
/* 12) Trovare il codice delle pizze con almeno 3 ingredienti. Restituire anche il numero di ingredienti.*/
SELECT codp, count(ingrediente) FROM ingrediente
GROUP BY codp
HAVING count(ingrediente) >= 3
/* 12bis) Trovare il codice delle pizze con il maggior numero di ingredienti. Restituire anche il numero di ingredienti.*/
SELECT DISTINCT codp, count(ingrediente)
FROM ingrediente
GROUP BY codp
HAVING count(ingrediente) >= ALL(
SELECT count(ingrediente) from ingrediente GROUP BY codp)
/* 13) Restituire in una singola colonna, cognome e nome dei clienti che hanno ordinato il minor numero di pizze margherita,
ordinando il risultato in base al cognome.*/
SELECT cognomec || ' ' || nomec FROM cliente
NATURAL JOIN ordine
NATURAL JOIN pizza
WHERE nome='margherita'
GROUP BY cognomec, nomec
HAVING sum(qta) <= ALL (
SELECT sum(qta) FROM cliente
NATURAL JOIN ordine
NATURAL JOIN pizza
WHERE nome='margherita'
GROUP BY cognomec, nomec
)
/* 14) Trovare i clienti che hanno ordinato (almeno una volta) la pizza capricciosa oppure ai quattro formaggi.*/
SELECT DISTINCT cognomec, nomec FROM cliente
NATURAL JOIN ordine
NATURAL JOIN pizza
WHERE nome='capricciosa' OR nome='quattro formaggi'
Last edited by AL on 07-05-2010 at 10:18
|