.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Basi di dati ~ comunicazione digitale (http://www.dsy.it/forum/forumdisplay.php?forumid=108)
-- Query laboratorio (http://www.dsy.it/forum/showthread.php?threadid=40394)


Posted by fradj on 05-05-2010 09:18:

Query laboratorio

Ciao a tutti... qualcuno ha le query fatte a lezione lunedi??? io purtroppo ho perso il quaderno. grazie mille...


Posted by AL on 06-05-2010 17:16:

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'


Posted by fradj on 06-05-2010 17:41:

thank you very much...


Posted by AL on 06-05-2010 17:46:

prego!


Posted by yaone on 06-05-2010 17:52:

queste sono quelle ke abbiamo fatto anke ieri (labA) vero?


Posted by AL on 06-05-2010 17:54:

Originally posted by yaone
queste sono quelle ke abbiamo fatto ieri (labA)


son tutte quelle che abbiamo fatto fin ora lunedì 3 e mercoledì 5 esclusa la numero 15 in cui mi sembra venga utilizzato INTERSECT


Posted by AL on 07-05-2010 10:19:

ho editato la richiesta della query 11 perché mancava un pezzo


All times are GMT. The time now is 00:02.
Show all 7 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.