1. Classificazione delle interrogazioni complesse Esempio : gestione ordini
` Query con ordinamento cliente COD-CLI NOME INDIRIZZO P-IVA
` Query con aggregazioni
` Query con raggruppamento
y gg pp
` Query binarie ordine COD-ORD COD-CLI DATA IMPORTO
` Query nidificate
Basi di Dati
dettaglio COD-ORD COD-PROD QTA
Interrogazioni complesse (I parte)
prodotto COD-PROD NOME PREZZO
Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte)
3 4
Istanza di ordine Query con ordinamento Order by
SELECT * FROM ORDINE SELECT * FROM ORDINE
ordine
WHERE IMPORTO < 100.000 WHERE IMPORTO < 100.000
IMPORTO
COD-ORD COD-CLI DATA
ORDER BY DATA ORDER BY COD CLI
1 50.000
50 000
3 2004-06-01
2004 06 01
IMPORTO
COD-ORD COD-CLI DATA IMPORTO
COD-ORD COD-CLI DATA
2 8.000
4 2004-08-03
50.000
50 000
1 3 2004-06-01
2004 06 01 12.000
12 000
4 1 2004-07-01
2004 07 01
3 5.500
3 2004-09-01
12.000
4 1 2004-07-01 1.500
5 1 2004-08-01
4 12.000
1 2004-07-01
1.500
5 1 2004-08-01 50.000
1 3 2004-06-01
5 1.500
1 2004-08-01
8.000
2 4 2004-08-03 5.500
6 3 2004-09-03
6 27.000
27 000
3 2004-09-03
2004 09 03
5.500
3 3 2004-09-01 27.000
3 3 2004-09-01
27.000
27 000
6 3 2004-09-03
2004 09 03 8.000
8 000
2 4 2004-08-03
2004 08 03
Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte)
5 6 7
Order by Query aggregate Query con massimo
` `
....... Utilizzano le funzioni aggregate: Selezionare l’importo massimo degli ordini.
` SUM sommatoria
ORDER BY COD CLI ASC, DATA DESC
` AVG media SELECT MAX(IMPORTO) AS MAX IMP
( )
IMPORTO
COD-ORD CO C DATA
CO O COD-CLI ` MIN minimo
FROM ORDINE
` MAX massimo
1.500
5 1 2004-08-01
` COUNT cardinalità
12.000
4 1 2004-07-01
MAX-IMP
27.000
6 3 2004 09 03
2004-09-03
` I NULL sono esclusi
5.500
3 3 2004-09-01 50.000
50.000
50 000
1 3 2004-06-01
2004 06 01
8.000
2 4 2004-08-03
Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte)
8 9 10
2. Query con sommatoria Query con raggruppamento Query con raggruppamento
` ` `
Selezionare la somma degli importi degli ordini relativi al si aggiungono le clausole: Attenzione!
cliente numero 1. ` GROUP BY (raggruppamento) ` Utilizzando GROUP BY il risultato della SELECT è ununico
` HAVING (selezione dei gruppi) record per ciascun gruppo.
`
SELECT SUM(IMPORTO) AS SOMMA IMP Pertanto in SELECT (e in HAVING) possono comparire
solo:
SELECT …..
FROM ORDINE
` Uno o più attributi del raggruppamento (i campi specificati
FROM …..
WHERE COD CLIENTE = 1
nella GROUP BY)
WHERE …..
` Funzioni aggregate: tali funzioni vengono valutate, e quindi
GROUPBY ….. forniscono un valore unico, per ciascun gruppo
SOMMA-IMP
HAVING …..
13.500
Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte)
11 12 13
Query con raggruppamento Passo 1: Valutazione WHERE Passo 2 : Raggruppamento
` `
Selezionare la somma degli importi degli ordini successivi si valuta la clausola GROUP BY
al 10 6 04 per quei clienti che hanno emesso almeno 2 IMPORTO
COD-ORD COD-CLI DATA
ordini. COD-ORD COD-CLI DATA IMPORTO
8.000
2 4 2004 08 03
2004-08-03
4 1 2004-07-01 12.000
5.500
3 3 2004-09-01
SELECT COD CLI, SUM (IMPORTO) 5 1 2004 08 01
2004-08-01 1.500
1 500
12.000
12 000
4 1 2004-07-01
2004 07 01
FROM ORDINE
3 3 2004-09-01 5.500
1.500
5 1 2004-08-01
WHERE DATA > 2004 06 10
6 3 2004-09-03
2004 09 03 27.000
27.000
6 3 2004-09-03
GROUP BY COD CLI
2 4 2004-08-03 8.000
HAVING COUNT (IMPORTO) >= 2
(WHERE DATA > 2004-06-10)
(GROUP BYCOD-CLI)
Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte)
14 15 16
Passo 3 : Calcolo degli aggregati Passo 4 : Estrazione dei gruppi Passo 5 : Produzione del risultato
` `
si calcolano SUM (IMPORTO) e COUNT(IMPORTO) per si valuta il predicato COUNT (IMPORTO) >=2
ciascun gruppo
COD-CLI SUM
(IMPORTO)
COD-CLI COUNT
SUM
1 13.500
(IMPORTO)
(IMPORTO)
COD-CLI COUNT
SUM
(IMPORTO)
(IMPORTO) 3
1 2 32.500
32 500
13.500
13 500
1 2
13.500 3 2
32.500
3 2
32.500
32 500 4 1
8.000
4 1
8.000
Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte)
17 18 19
3. Doppio raggruppamento Situazione dopo il join e il raggruppamento Estrazione del risultato
ordine dettaglio
` `
Selezionare la somma delle quantità dei dettagli degli si valuta la funzione aggregata SUM(QTA) e il predicato
ordini emessi da ciascun cliente per ciascun prodotto, HAVING
COD-CLI ORDINE. DETTAGLIO. COD-PROD QTA
purché la somma superi 50. COD-ORD COD-ORD
1 3 3 1 30
COD-CLI COD-PROD SUM(QTA)
gruppo 1,1
SELECT COD CLI, COD PROD, SUM(QTA) 1 4 4 1 20
FROM ORDINE AS O, DETTAGLIO AS D 1 3 3 2 1 1 50
30
gruppo 1,2
WHERE O.COD ORD = D.COD ORD 1 5 5 2 10 1 2 40
gruppo 2,1
GROUP BY COD CLI, COD PROD 2 3 3 1 60 2 1 60
HAVING SUM(QTA) > 50 3 1 1 1 40 3 1 95
3 2 2 1 gruppo 3,1
30
3 6 6 1 25
Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte)
20 21 22
Query con raggruppamento e ordinamento Raggruppamento e ordinamento ESERCIZI SUL GROUP BY
` `
E’ possibile ordinare il risultato delle query con Selezionare la somma degli importi degli ordini successivi SELECT ARTICOLO
raggruppamento al 10/6/04 per quei clienti che hanno emesso almeno 2 FROM VENDITE GROUP BY ARTICOLO
ordini dopo quella data, in ordine di cliente. HAVING COUNT(DISTINCT DATA)>1
( )
SELECT …..
ARTICOLO DATA NUM
SELECT COD CLI, SUM (IMPORTO)
FROM …..
FROM ORDINE
[ WHERE ….. ] PENNA 2004-12-13 2
WHERE DATA > 2004 06 10
GROUP BY ….. MATITA 2004-12-08
2004 12 08 1
GROUP BY COD CLI
[ HAVING ….. ]
GOMMA 2004-12-10 1
HAVING COUNT (IMPORTO) >= 2
ORDER BY ….
MATITA 2004-12-08 2
ORDER BY COD CLI
PENNA 2004 12 08
2004-12-08 1
Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte) Basi Di Dati Interrogazioni complesse (I parte)
23 24 25
ESERCIZI SUL GROUP BY
` GROUP BY ARTICOLO
ARTICOLO DATA
PENNA 2004-12-13,
2004-12-13 2004-12-08
MATITA 2004-12-08, 2004-12-08
GOMMA 2004-12-10
2004 12 10
` HAVING COUNT(DISTINCT DATA)>1
ARTICOLO
PENNA
Basi Di Dati Interrogazioni complesse (I parte)
26