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?
123SELECT Cognome, Nome, IndirizzoFROM CLIENTEWHERE Debito > 0 - Quali articoli sono stati ordinati?
12SELECT DISTINCT IDarticoloFROM DETTAGLIO - Quali ordini risultano ancora inevasi?
123SELECT *FROM ORDINEWHERE DataEvasione IS NULL - Quali ordini sono stati effettuati dal cliente di codice XA1 dal 15/3/96?
123SELECT IDordine, DataOrdineFROM ORDINEWHERE (IDcliente = "XA1") AND (DataOrdine >= #15/03/96#) - Quanti ordini…
123SELECT Count(*)FROM ORDINEWHERE (IDcliente = "XA1") AND (DataOrdine >= #15/03/96#) - Gli ordini di un cliente a partire da una certa data
1234PARAMETERS CodCli, DataIni date;SELECT ordineID, DataOrdineFROM ORDINEWHERE (clienteID = CodCli) AND (DataOrdine >= DataIniz) - Quali clienti hanno un debito verso l’azienda maggiore di X?
123SELECT *FROM CLIENTEWHERE 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
123SELECT *FROM ARTICOLOWHERE 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”
123SELECT *FROM CLIENTEWHERE Indirizzo LIKE "*CAP*30???" - Produrre i dettagli di un ordine, dato il suo numero N
123SELECT articoloID, Descrizione, QuantFROM DETTAGLIO, ARTICOLOWHERE (DETTAGLIO.articoloID = ARTICOLO.IDarticolo) AND (IDordine = N)
oppure
123SELECT articoloID, Descrizione, QuantFROM DETTAGLIO INNER JOIN ARTICOLO ON DETTAGLIO.articoloID = ARTICOLO.IDarticoloWHERE 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)
12345SELECT 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
123SELECT *FROM CLIENTEORDER BY Nome - Produrre l’elenco dei clienti che presentano dei debiti verso l’azienda in ordine decrescente secondo il debito
1234SELECT Nome, DebitoFROM CLIENTEWHERE Debito > 0ORDER 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à
123SELECT *FROM DETTAGLIOORDER BY ordineID ASC, Quant DESC - Quanti pezzi dell’articolo X sono stati ordinati in tutto?
123SELECT Sum(Quant)FROM DETTAGLIOWHERE articoloID = X - A quanto ammontano ora i crediti vantati sui clienti? Qual è il credito massimo? E in media?
12SELECT 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?
123SELECT Sum(Debito), Max(Debito), Avg(Debito)FROM CLIENTEWHERE Debito > 0 - Elencare tutte le coppie di clienti che hanno lo stesso indirizzo
123SELECT X.Nome AS [l'uno], Y.Nome AS [l'altro], X.IndirizzoFROM CLIENTE AS X, CLIENTE AS YWHERE X.Indirizzo = Y.Indirizzo - Elencare tutte le coppie distinte di clienti che hanno lo stesso indirizzo
123SELECT X.Nome AS [l'uno], Y.Nome AS [l'altro], X.IndirizzoFROM CLIENTE AS X, CLIENTE AS YWHERE (X.Indirizzo = Y.Indirizzo) AND (X.IDcliente < Y.IDcliente)
oppure
123SELECT X.Nome AS [l'uno], Y.Nome AS [l'altro], X.IndirizzoFROM CLIENTE AS X INNER JOIN CLIENTE AS Y ON X.IDcliente < Y.IDclienteWHERE X.indirizzo = Y.indirizzo
oppure
123SELECT X.Nome AS [l'uno], Y.Nome AS [l'altro], X.IndirizzoFROM 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?
12345SELECT Dataordine, Count(*)FROM ORDINEWHERE DataEvasione IS NOT NULLGROUP BY DataEvasioneHAVING Count(*) >= Nmin - Quanti ordini ha effettuato ciascun cliente?
123SELECT IDcliente, Count(*)FROM ORDINEGROUP BY IDcliente - Fare una graduatoria degli articoli più richiesti, con la loro descrizione