Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Basi di dati ~ comunicazione digitale
 
Query laboratorio
Clicca QUI per vedere il messaggio nel forum
fradj
Ciao a tutti... qualcuno ha le query fatte a lezione lunedi??? io purtroppo ho perso il quaderno. grazie mille...

AL
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'

fradj
thank you very much...

AL
prego!

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

AL
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

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

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate