Ordini

Il problema

Rel_azienda

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

  1. Nome e indirizzo dei clienti che presentano un debito verso l’azienda?
    SELECT Cognome, Nome, Indirizzo
    FROM   CLIENTE
    WHERE  Debito > 0
  2. Quali articoli sono stati ordinati?
    SELECT DISTINCT IDarticolo
    FROM   DETTAGLIO
  3. Quali ordini risultano ancora inevasi?
    SELECT *
    FROM   ORDINE
    WHERE  DataEvasione IS NULL
  4. 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#)
  5. Quanti ordini…
    SELECT Count(*)
    FROM   ORDINE
    WHERE  (IDcliente = "XA1") AND (DataOrdine >= #15/03/96#)
  6. 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)
  7. Quali clienti hanno un debito verso l’azienda maggiore di X?
    SELECT *
    FROM   CLIENTE
    WHERE  Debito > X
  8. 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*"
  9. 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???"
  10. 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
  11. 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
  12. Produrre l’elenco dei clienti in ordine alfabetico
    SELECT   *
    FROM     CLIENTE
    ORDER BY Nome
  13. 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
  14. 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
  15. Quanti pezzi dell’articolo X sono stati ordinati in tutto?
    SELECT Sum(Quant)
    FROM   DETTAGLIO
    WHERE  articoloID = X
  16. 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
  17. 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
  18. 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
  19. 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)
  20. 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
  21. Quanti ordini ha effettuato ciascun cliente?
    SELECT   IDcliente, Count(*)
    FROM     ORDINE
    GROUP BY IDcliente
  22. Fare una graduatoria degli articoli più richiesti, con la loro descrizione