Da revisionare: alcuni nomi dei campi non corrispondono allo schema…
- ARTICOLO(IDarticolo, Descrizione, CostoUnitario, Giacenza)
- MEZZO(IDmezzo, Descrizione, TempoConsegna)
- ORDINE(IDordine, DataOrdine, DataEvasione, mezzoID, clienteID)
- DETTAGLIO(ordineID, articoloID, Quantità)
- CLIENTE(IDcliente, Cognome, Nome, Indirizzo, …, Debito)
- VECCHIO(IDvecchiocliente, DallAnno, Totale vendite, Sconto)
Le chiavi primarie sono evidenziate in grassetto.
Le chiavi esterne sono evidenziate in corsivo.
Query
- Nome e indirizzo dei clienti che presentano un debito verso l’azienda?
SELECT Cognome, Nome, Indirizzo FROM CLIENTE WHERE Debito > 0
- Quali articoli sono stati ordinati?
SELECT DISTINCT IDarticolo FROM DETTAGLIO
- Quali ordini risultano ancora inevasi?
SELECT * FROM ORDINE WHERE DataEvasione IS NULL
- Quali ordini sono stati effettuati dal cliente di codice XA1 dal 15/3/96?
SELECT IDordine, DataOrdine FROM ORDINE WHERE (IDcliente = "XA1") AND (DataOrdine >= #15/03/96#)
- Quanti ordini…
SELECT Count(*) FROM ORDINE WHERE (IDcliente = "XA1") AND (DataOrdine >= #15/03/96#)
- Gli ordini di un cliente a partire da una certa data
PARAMETERS CodCli, DataIni date; SELECT ordineID, DataOrdine FROM ORDINE WHERE (clienteID = CodCli) AND (DataOrdine >= DataIniz)
- Quali clienti hanno un debito verso l’azienda maggiore di X?
SELECT * FROM CLIENTE WHERE Debito > X
- Trovare tutti gli articoli nella cui descrizione appare la sigla DOC seguita da tre caratteri e, successivamente, in un punto qualsiasi, dalla stringa 1995
SELECT * FROM ARTICOLO WHERE Descrizione LIKE "*DOC???*1995*"
- Elencare tutti i clienti che abitano nel comune di “Venezia”, facendo l’ipotesi che sia stato specificato il CAP nella forma “CAP xxxxx”
SELECT * FROM CLIENTE WHERE Indirizzo LIKE "*CAP*30???"
- Produrre i dettagli di un ordine, dato il suo numero N
SELECT articoloID, Descrizione, Quant FROM DETTAGLIO, ARTICOLO WHERE (DETTAGLIO.articoloID = ARTICOLO.IDarticolo) AND (IDordine = N)
oppure
SELECT articoloID, Descrizione, Quant FROM DETTAGLIO INNER JOIN ARTICOLO ON DETTAGLIO.articoloID = ARTICOLO.IDarticolo WHERE IDordine = N
- Produrre una tabella che riporti, per ogni cliente, una sola volta, la descrizione di ogni articolo da lui ordinato (in uno o più dei suoi ordini)
SELECT DISTINCT Nome, Descrizione AS [Descrizione Articolo] FROM CLIENTE INNER JOIN (ORDINE INNER JOIN (DETTAGLIO INNER JOIN ARTICOLO ON DETTAGLIO.articoloID = ARTICOLO.IDarticolo) ON ORDINE.IDordine = DETTAGLIO.ordineID) ON CLIENTE.IDcliente = ORDINE.clienteID
- Produrre l’elenco dei clienti in ordine alfabetico
SELECT * FROM CLIENTE ORDER BY Nome
- Produrre l’elenco dei clienti che presentano dei debiti verso l’azienda in ordine decrescente secondo il debito
SELECT Nome, Debito FROM CLIENTE WHERE Debito > 0 ORDER BY Debito DESC
- Produrre l’elenco dei dettagli ordini, ordinati prima secondo il numero d’ordine (crescente) e, all’interno di uno stesso ordine, in modo decrescente secondo le quantità
SELECT * FROM DETTAGLIO ORDER BY ordineID ASC, Quant DESC
- Quanti pezzi dell’articolo X sono stati ordinati in tutto?
SELECT Sum(Quant) FROM DETTAGLIO WHERE articoloID = X
- A quanto ammontano ora i crediti vantati sui clienti? Qual è il credito massimo? E in media?
SELECT Sum(Debito), Max(Debito), Avg(Debito) FROM CLIENTE
- A quanto ammontano ora i crediti vantati sui clienti? Qual è il credito massimo? E in media tra chi ha un debito?
SELECT Sum(Debito), Max(Debito), Avg(Debito) FROM CLIENTE WHERE Debito > 0
- Elencare tutte le coppie di clienti che hanno lo stesso indirizzo
SELECT X.Nome AS [l'uno], Y.Nome AS [l'altro], X.Indirizzo FROM CLIENTE AS X, CLIENTE AS Y WHERE X.Indirizzo = Y.Indirizzo
- Elencare tutte le coppie distinte di clienti che hanno lo stesso indirizzo
SELECT X.Nome AS [l'uno], Y.Nome AS [l'altro], X.Indirizzo FROM CLIENTE AS X, CLIENTE AS Y WHERE (X.Indirizzo = Y.Indirizzo) AND (X.IDcliente < Y.IDcliente)
oppure
SELECT X.Nome AS [l'uno], Y.Nome AS [l'altro], X.Indirizzo FROM CLIENTE AS X INNER JOIN CLIENTE AS Y ON X.IDcliente < Y.IDcliente WHERE X.indirizzo = Y.indirizzo
oppure
SELECT X.Nome AS [l'uno], Y.Nome AS [l'altro], X.Indirizzo FROM CLIENTE AS X INNER JOIN CLIENTE AS Y ON (X.IDcliente < Y.IDcliente) AND (X.Indirizzo = Y.Indirizzo)
- In quali giorni sono stati effettuati almeno Nmin ORDINE, tra quelli già evasi?
SELECT Dataordine, Count(*) FROM ORDINE WHERE DataEvasione IS NOT NULL GROUP BY DataEvasione HAVING Count(*) >= Nmin
- Quanti ordini ha effettuato ciascun cliente?
SELECT IDcliente, Count(*) FROM ORDINE GROUP BY IDcliente
- Fare una graduatoria degli articoli più richiesti, con la loro descrizione