Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Realtà aziendale

Precedente
SUPERIORE
Successiva
Tratto da G. Callegarin, INFORMATICA 3 - Cedam

Diagramma E/R

Schema relazionale

ARTICOLO(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)

Query

Nome 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

...

Realtà aziendale - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva