|
Tratto da G. Callegarin, INFORMATICA 3 - Cedam Diagramma E/RSchema relazionaleARTICOLO(IDarticolo, Descrizione, CostoUnitario, Giacenza) MEZZO(IDmezzo, Descrizione, TempoConsegna) ORDINE(IDordine, DataOrdine, DataEvasione, clienteID, mezzoID) DETTAGLIO(ordineID, articoloID, Quant) CLIENTE(IDcliente, Nome, Indirizzo, Debito) VECCHIO(clienteID, DallAnno, TotVendite) QueryNome e indirizzo dei clienti che presentano un debito verso l'azienda? SELECT 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%"); "*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___%"); "*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); SELECT articoloID, Descrizione, Quant FROM DETTAGLIO INNER JOIN ARTICOLO ON (DETTAGLIO.articoloID = ARTICOLO.IDarticolo) WHERE (IDordine = N); SELECTT articoloID, Descrizione, Quant FROM DETTAGLIO natural join ARTICOLO 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); 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); 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 ... |
|