07-SQL1
07-SQL1
Struttura di base
Clausola WHERE
Ordinamento del risultato
Join
Funzioni aggregate
Operatore GROUP BY
Il linguaggio SQL
● Operazione di interrogazione:
○ SELECT
■ Interrogazione di una base dati per estrarre i dati di interesse
● Operazioni di modifica:
○ INSERT
■ Inserimento di nuove informazioni in una tabella
○ DELETE
■ Cancellazione di dati obsoleti
○ UPDATE
■ Aggiornamento di dati presenti nella base dati
Sintassi del lingauggio SQL
● Grammatica
○ parentesi angolari < >
■ isolano un termine della sintassi
○ parentesi quadre [ ]
■ indicano che il termine all’interno è opzionale
○ parentesi graffe { }
■ indicano che il termine racchiuso può non comparire o essere ripetuto
un numero arbitrario di volte
○ barra verticale |
■ indica che deve essere scelto uno tra i termini separati dalle barre
Istruzione SELECT sintassi
PROIEZIONE, scelgo le colonne SELEZIONE, scelgo le righe
L’asterisco * si usa
come abbreviazione
per indicare tutti gli
attributi
8
Istruzione SELECT esempio
9
BD forniture prodotti
P FP
CodP NomeP Colore Taglia Magazzino CodF CodP Qta
P1 Maglia Rosso 40 Torino F1 P1 300
P2 Jeans Verde 48 Milano F1 P2 200
P3 Camicia Blu 48 Roma F1 P3 400
P4 Camicia Blu 44 Torino F1 P4 200
P5 Gonna Blu 40 Milano F1 P5 100
P6 Bermuda Rosso 42 Torino F1 P6 100
F2 P1 300
F2 P2 400
F F3 P2 200
CodF NomeF NSoci Sede
F1 Andrea 2 Torino F4 P3 200
F2 Luca 1 Milano F4 P4 300
F3 Antonio 3 Milano F4 P5 400
F4 Gabriele 2 Torino
F5 Matteo 3 Venezia
4
Istruzione SELECT esempio
F R
CodF NomeF NSoci Sede
F1 Andrea 2 Torino π
CodF, NSoci
F2 Luca 1 Milano
F3 Antonio 3 Milano
F4 Gabriele 2 Torino σ
Sede='Milano'
F5 Matteo 3 Venezia
11
Istruzione SELECT esempio
Trovare il codice e il numero di soci dei fornitori di Milano
SELECT CodF, NSoci
FROM F
WHERE Sede='Milano';
F
CodF NomeF NSoci Sede
F1 Andrea 2 Torino
R
CodF NSoci
F2 Luca 1 Milano F2 1
F3 Antonio 3 Milano F3 3
F4 Gabriele 2 Torino
F5 Matteo 3 Venezia
12
SELECT base 1
Trovare il codice di tutti i prodotti
SELECT CodP R
π CodP
FROM P;
P
P R
CodP NomeP Colore Taglia Magazzino CodP
P1 Maglia Rosso 40 Torino P1
P2 Jeans Verde 48 Milano P2
P3 Camicia Blu 48 Roma P3
P4 Camicia Blu 44 Torino P4
P5 Gonna Blu 40 Milano P5
P6 Bermuda Rosso 42 Torino P6
13
SELECT base 2
FP R
CodF CodP Qta CodP
F1 P1 300 P1
F1 P2 200 P2
F1 P3 400 P3
F1 P4 200 SELECT CodP P4
F1 P5 100 P5
F1 P6 100
FROM FP;
P6
F2 P1 300 P1
F2 P2 400 P2
F3 P2 200 P2
F4 P3 200 P3
F4 P4 300 P4
14
F4 P5 400 P5
SELECT base 2
Trovare il codice dei prodotti forniti da almeno un fornitore
SELECT CodP
FROM FP; π
CodP
FP
Non effettua la rimozione dei duplicati
15
Eliminazione dei duplicati
16
SELECT base 2
Trovare il codice dei prodotti diversi forniti da almeno un fornitore
FP
CodF CodP Qta
F1 P1 300 SELECT DISTINCT CodP
F1 P2 200 FROM FP; R
F1 P3 400
F1 P4 200 CodP
F1 P5 100 P1
F1 P6 100 P2
F2 P1 300 P3
F2 P2 400 P4
F3 P2 200 P5
F4 P3 200 P6
F4 P4 300
17
F4 P5 400
Selezione di tutte le informazioni
Trovare tutte le informazioni sui prodotti
19
Selezione con espressione (2/3)
20
Selezione con espressione (3/3)
FROM P;
CodP TagliaUSA
P1 26
R
P2 34
P3 34
P4 30
P5 26
P6 28 21
Struttura dell’istruzione SELECT (1)
22
Clausola WHERE
23
Clausola WHERE 1
Trovare il codice dei fornitori di Milano
SELECT CodF
FROM F
WHERE Sede='Milano';
24
Clausola WHERE 2
Trovare il codice e il numero di soci dei fornitori che non hanno sede a
Milano
SELECT CodF, NSoci
FROM F
F WHERE Sede<>'Milano';
CodF NomeF NSoci Sede R
F1 Andrea 2 Torino CodF NSoci
F2 Luca 1 Milano F1 2
F3 Antonio 3 Milano F4 2
F4 Gabriele 2 Torino F5 3
F5 Matteo 3 Venezia
25
Espressioni booleane 1
Trovare il codice dei fornitori di Milano con più di 2 soci
SELECT CodF
FROM F
WHERE Sede='Milano' AND NSoci>2;
26
Espressioni booleane 2
FROM F
WHERE Sede='Milano' OR Sede='Torino';
F
CodF NomeF NSoci Sede
F1 Andrea 2 Torino
F2 Luca 1 Milano
F3 Antonio 3 Milano
F4 Gabriele 2 Torino
F5 Matteo 3 Venezia 28
Ricerca testuale
● Operatore LIKE
NomeAttributo LIKE StringaDiCaratteri
29
Ricerca testuale 1
Trovare il codice e il nome dei prodotti il cui nome inizia con la lettera C
SELECT CodP, NomeP
FROM P
WHERE NomeP LIKE 'C%';
PCodP NomeP Colore Taglia Magazzino
P1 Maglia Rosso 40 Torino
P2 Jeans Verde 48 Milano CodP NomeP
P3 Camicia Blu 48 Roma R P3 Camicia
P4 Camicia Blu 44 Torino P4 Camicia
P5 Gonna Blu 40 Milano
P6 Bermuda Rosso 42 Torino
30
Ricerca testuale 2
31
Ricerca testuale 3
32
Ricerca testuale 4
33
Gestione di valori NULL 1
35
Ricerca di valori NULL
Operatore speciale IS
36
Ricerca di valori NULL 1
Trovare il codice e il nome dei prodotti per cui la taglia non è indicata
SELECT CodP, NomeP
FROM P
WHERE Taglia IS NULL;
PCodP
P1
NomeP
Maglia
Colore
Rosso
Taglia
40
Magazzino
Torino
P2 Jeans Verde 48 Milano
CodP NomeP
P3 Camicia Blu 48 Roma
P4 Camicia Blu 44 Torino
R P5 Gonna
37
Ricerca di valori NULL 2
39
Ordinamento del risultato 1
Clausola ORDER BY
ORDER BY NomeAttributo [ASC | DESC]
{, NomeAttributo [ASC | DESC]}
● l’ordinamento implicito è crescente
senza ASC
● gli attributi di ordinamento devono comparire nella
clausola SELECT
anche implicitamente (come SELECT *)
41
Ordinamento del risultato 2
38
Struttura dell’istruzione SELECT 3
45
Join 1
46
DB forniture prodotti
FP
CodF CodP Qta
F1 P1 300
F F1 P2 200
CodF NomeF NSoci Sede
F1 Andrea 2 Torino F1 P3 400
F2 Luca 1 Milano F1 P4 200
F3 Antonio 3 Milano F1 P5 100
F4 Gabriele 2 Torino F1 P6 100
F5 Matteo 3 Venezia F2 P1 300
F2 P2 400
F3 P2 200
F4 P3 200
F4 P4 300
F4 P5 400
47
Prodotto cartesiano
SELECT NomeF
FROM F, FP ;
48
Prodotto cartesiano
Prodotto cartesiano
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
F1 Andrea 2 Torino F1 P1 300
F1 Andrea 2 Torino F1 P2 200
F1 Andrea 2 Torino F1 P3 400
F1 Andrea 2 Torino F1 P4 200
F1 Andrea 2 Torino F1 P5 100
F1 Andrea 2 Torino F1 P6 100
F1 Andrea 2 Torino F2 P1 300
… … … … … … …
F2 Luca 1 Milano F1 P1 300
… … … … … … …
F2 Luca 1 Milano F2 P1 300
… … … … … … …
50
Join 1
=
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
F1 Andrea 2 Torino F1 P1 300
F1 Andrea 2 Torino F1 P2 200
F1 Andrea 2 Torino F1 P3 400
F1 Andrea 2 Torino F1 P4 200
F1 Andrea 2 Torino F1 P5 100
F1 Andrea 2 Torino F1 P6 100
F1 Andrea 2 Torino F2 P1 300
… … … … … … …
F2 Luca 1 Milano F1 P1 300
… … … … … … …
F2 Luca 1 Milano F2 P1 300
… … … … … … …
51
Notazione punto (.)
NomeTabella.NomeAttributo
53
Join 1
54
Join 1
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
F1 Andrea 2 Torino F1 P1 300
F1 Andrea 2 Torino F1 P2 200
F1 Andrea 2 Torino F1 P3 400
F1 Andrea 2 Torino F1 P4 200
F1 Andrea 2 Torino F1 P5 100
F1 Andrea 2 Torino F1 P6 100
F2 Luca 1 Milano F2 P1 300
F2 Luca 1 Milano F2 P2 400
F3 Antonio 3 Milano F3 P2 200
F4 Gabriele 2 Torino F4 P3 200
F4 Gabriele 2 Torino F4 P4 300
F4 Gabriele 2 Torino F4 P5 400
55
Join 1
56
Join 1
FP.CodP='P2'
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
F1 Andrea 2 Torino F1 P1 300
F1 Andrea 2 Torino F1 P2 200
F1 Andrea 2 Torino F1 P3 400
F1 Andrea 2 Torino F1 P4 200
F1 Andrea 2 Torino F1 P5 100
F1 Andrea 2 Torino F1 P6 100
F2 Luca 1 Milano F2 P1 300
F2 Luca 1 Milano F2 P2 400
F3 Antonio 3 Milano F3 P2 200
F4 Gabriele 2 Torino F4 P3 200
F4 Gabriele 2 Torino F4 P4 300
F4 Gabriele 2 Torino F4 P5 400
57
Join 1
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
F1 Andrea 2 Torino F1 P2 200
F2 Luca 1 Milano F2 P2 400
F3 Antonio 3 Milano F3 P2 200
58
Join 1
59
Join 1
σ
CodP=‘P2’
σ
F CodP=‘P2’
FP F FP
60
Join 1
61
Join 1
62
Join 1
63
Join 2
Trovare il nome dei fornitori che forniscono almeno un prodotto
rosso
SELECT NomeF
FROM F, FP, P
WHEREF.CodF=FP.CodF AND P.CodP=FP.CodP
AND Colore='Rosso';
64
Ridenominazione
F AS FX F AS FY
CodF NomeF NSoci Sede CodF NomeF NSoci Sede
F1 Andrea 2 Torino F1 Andrea 2 Torino
F2 Luca 1 Milano F2 Luca 1 Milano
F3 Antonio 3 Milano F3 Antonio 3 Milano
F4 Gabriele 2 Torino F4 Gabriele 2 Torino
F5 Matteo 3 Venezia F5 Matteo 3 Venezia
66
Join 3
Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano
sede nella stessa città
R FX.CodF FY.CodF
F1 F4
F2 F3
70
Join: sintassi alternativa
71
Join: sintassi alternativa
72
Outer join
INNER join
SELECT NomeF
FROM P INNER JOIN FP ON P.CodP=FP.CodP
INNER JOIN F ON F.CodF=FP.CodF
WHERE P.Colore='Rosso';
74
OUTER join
75
OUTER join
R
F.CodF F.NomeF FP.CodP
F1 Andrea P1
F1 Andrea P2
F1 Andrea P3
F1 Andrea P4
F1 Andrea P5
F1 Andrea P6
F2 Luca P1
F2 Luca P2
F3 Antonio P2
F4 Gabriele P3
F4 Gabriele P4
F4 Gabriele P5
F5 Matteo NULL 76
Limiti dei precedenti operatori
78
Funzioni aggregate
79
Funzioni aggregate
80
Struttura dell’istruzione SELECT (4)
SELECT ElencoFunzioniAggregateDaVisualizzare
FROM ElencoTabelleDaUtilizzare
[WHERE Condizioni DiTupla ]
[ORDER BY ElencoAttributiDiOrdinamento ];
81
Limiti degli operatori aggregati
83
Funzione COUNT
84
Funzione COUNT 1
Trovare il numero di fornitori
SELECT COUNT(*)
FROM F;
F
R
CodF NomeF NSoci Sede
F1 Andrea 2 Torino
F2 Luca 1 Milano
F3 Antonio 3 Milano
5
F4 Gabriele 2 Torino
F5 Matteo 3 Venezia
85
Funzione COUNT 2
Trovare il numero di fornitori che hanno almeno una fornitura
FP
CodF CodP Qta SELECT COUNT(*)
F1 P1 300 FROM FP;
F1 P2 200
F1 P3 400
R
F1 P4 200
F1 P5 100
F1 P6 100 12
F2 P1 300
F2 P2 400
F3 P2 200 Conta il numero di forniture, non
F4 P3 200
F4 P4 300
di fornitori
F4 P5 400 86
Funzione COUNT 2
Trovare il numero di fornitori che hanno almeno una fornitura
FP
CodF CodP Qta SELECT COUNT(CodF)
F1 P1 300 FROM FP;
F1 P2 200
F1 P3 400
F1 P4 200 R
F1 P5 100
F1 P6 100
12
F2 P1 300
F2 P2 400
F3 P2 200 Conta il numero di forniture, non
F4 P3 200
F4 P4 300
di fornitori
F4 P5 400 87
Funzione COUNT 2
Trovare il numero di fornitori che hanno almeno una fornitura
FP
CodF CodP Qta SELECT COUNT(DISTINCT CodF)
F1 P1 300 FROM FP;
F1 P2 200
F1 P3 400
F1 P4 200 R
F1 P5 100
F1 P6 100
4
F2 P1 300
F2 P2 400
F3 P2 200
F4 P3 200 Conta il numero di fornitori diversi
F4 P4 300
88
F4 P5 400
Funzione COUNT
89
Funzioni aggregate e WHERE
Trovare il numero di fornitori che forniscono il prodotto P2
FP SELECT COUNT(*)
CodF CodP Qta
FROM FP
F1 P1 300
F1 P2 200 WHERE CodP='P2';
F1 P3 400
F1 P4 200
F1 P5 100
F1 P6 100
CodF CodP Qta R
F1 P2 200
F2 P1 300
F2 P2 400
F2 P2 400 3
F3 P2 200
F3 P2 200
F4 P3 200
F4 P4 300
90
F4 P5 400
Funzioni aggregate e WHERE
91
Funzioni SUM, MAX, MIN, AVG
92
Funzione SUM
Trovare la quantità totale di pezzi forniti per il prodotto P2
FP
CodF CodP Qta SELECT SUM(Qta)
F1 P1 300 FROM FP
F1 P2 200
F1 P3 400 WHERE CodP='P2';
F1 P4 200
F1 P5 100 CodF CodP Qta R
F1 P6 100 F1 P2 200
F2 P1 300
F2 P2 400
F2 P2 400 800
F3 P2 200
F3 P2 200
F4 P3 200
F4 P4 300
93
F4 P5 400
Raggruppamento
Per ogni prodotto, trovare la quantità totale di pezzi forniti
FP
CodF CodP Qta
F1 P1 300
F1 P2 200
F1 P3 400
F1 P4 200
F1 P5 100
F1 P6 100
F2 P1 300
F2 P2 400
F3 P2 200
F4 P3 200
F4 P4 300
94
F4 P5 400
Raggruppamento
Per ogni prodotto, trovare la quantità totale di pezzi forniti
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
F1 P3 400 F1 P2 200
F1 P4 200 F2 P2 400
F1 P5 100 F3 P2 200
F1 P6 100 F1 P3 400
F2 P1 300 F4 P3 200
F2 P2 400 F1 P4 200
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
95
F4 P5 400 F1 P6 100
Raggruppamento
Per ogni prodotto, trovare la quantità totale di pezzi forniti
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
F1 P3 400 F1 P2 200
F1 P4 200 F2 P2 400
F1 P5 100 F3 P2 200
F1 P6 100 F1 P3 400
F2 P1 300 F4 P3 200
F2 P2 400 F1 P4 200
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
96
F4 P5 400 F1 P6 100
Raggruppamento
Per ogni prodotto, trovare la quantità totale di pezzi forniti
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
CodP
F1 P3 400 F1 P2 200
P1 600
F1 P4 200 F2 P2 400
F1 P5 100 F3 P2 200
F1 P6 100 F1 P3 400
F2 P1 300 F4 P3 200
F2 P2 400 F1 P4 200
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
97
F4 P5 400 F1 P6 100
Raggruppamento
Per ogni prodotto, trovare la quantità totale di pezzi forniti
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
CodP
F1 P3 400 F1 P2 200
P1 600
F1 P4 200 F2 P2 400
F1 P5 100 F3 P2 200 P2 800
F1 P6 100 F1 P3 400
F2 P1 300 F4 P3 200
F2 P2 400 F1 P4 200
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
98
F4 P5 400 F1 P6 100
Raggruppamento
Per ogni prodotto, trovare la quantità totale di pezzi forniti
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
CodP
F1 P3 400 F1 P2 200
P1 600
F1 P4 200 F2 P2 400
F1 P5 100 F3 P2 200 P2 800
F1 P6 100 F1 P3 400 P3 600
F2 P1 300 F4 P3 200
F2 P2 400 F1 P4 200
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
99
F4 P5 400 F1 P6 100
Raggruppamento
Per ogni prodotto, trovare la quantità totale di pezzi forniti
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
R
CodP
F1 P3 400 F1 P2 200
P1 600
F1 P4 200 F2 P2 400
F1 P5 100 F3 P2 200 P2 800
F1 P6 100 F1 P3 400 P3 600
F2 P1 300 F4 P3 200 P4 500
F2 P2 400 F1 P4 200 P5 500
F3 P2 200 F4 P4 300 P6 100
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
100
F4 P5 400 F1 P6 100
Raggruppamento
101
GROUP BY
● Clausola di raggruppamento
GROUP BY ElencoAttributiDiRaggruppamento
● l’ordine degli attributi di raggruppamento è ininfluente
● Nella clausola SELECT possono comparire solo attributi presenti
nella clausola GROUP BY funzioni aggregate
102
GROUP BY e WHERE
Per ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori
con sede a Milano
FP
CodF CodP Qta
F1 P1 300
F CodF NomeF NSoci Sede F1 P2 200
F1 Andrea 2 Torino F1 P3 400
F2 Luca 1 Milano F1 P4 200
F3 Antonio 3 Milano F1 P5 100
F4 Gabriele 2 Torino F1 P6 100
F5 Matteo 3 Venezia F2 P1 300
F2 P2 400
F3 P2 200
F4 P3 200
F4 P4 300
103
F4 P5 400
GROUP BY e WHERE
Per ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori
con sede a Milano
F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta
F1 Andrea 2 Torino F1 P1 300
F1 Andrea 2 Torino F1 P2 200
F1 Andrea 2 Torino F1 P3 400
F1 Andrea 2 Torino F1 P4 200
F1 Andrea 2 Torino F1 P5 100
F1 Andrea 2 Torino F1 P6 100
F2 Luca 1 Milano F2 P1 300
F2 Luca 1 Milano F2 P2 400
F3 Antonio 3 Milano F3 P2 200
F4 Gabriele 2 Torino F4 P3 200
F4 Gabriele 2 Torino F4 P4 300
104
F4 Gabriele 2 Torino F4 P5 400
GROUP BY e WHERE
FP.CodP FP.Qta
FP.CodP
P1 300 RP1 300
P2 400
P2 600
P2 200
106
GROUP BY e SELECT
Artificio sintattico
gli attributi univocamente determinati da attributi già presenti nella
clausola GROUP BY possono essere aggiunti senza alterare il
risultato
107
Semantica delle interrogazioni
con operatori aggregati e raggruppamenti
1. Esegui la interrogazione senza tener conto della GROUP BY e
degli operatori aggregati
2. Raggruppa le righe che hanno stessi valori per gli attributi che
compaiono nella listaAttributi della GROUP BY
3. Applica l’operatore aggregato a ciascun gruppo di n-ple
Struttura dell’istruzione SELECT 5
109
Condizione di selezione sui gruppi
● Trovare la quantità totale di pezzi forniti per i prodotti per cui sono
forniti in totale almeno 600 pezzi
○ la condizione è definita su valori aggregati
110
Condizione di selezione sui gruppi 1
Trovare la quantità totale di pezzi forniti per i prodotti per cui
sono forniti in totale almeno 600 pezzi
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
F1 P3 400 F1 P2 200
F1 P4 200 F2 P2 400
CodP
F1 P5 100 F3 P2 200
P1 600
F1 P6 100 F1 P3 400
F2 P1 300 F4 P3 200
F2 P2 400 F1 P4 200
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
111
F4 P5 400 F1 P6 100
Condizione di selezione sui gruppi 1
Trovare la quantità totale di pezzi forniti per i prodotti per cui sono
forniti in totale almeno 600 pezzi
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
F1 P3 400 F1 P2 200
F1 P4 200 F2 P2 400
CodP
F1 P5 100 F3 P2 200
P1 600
F1 P6 100 F1 P3 400
F4 P3 200 P2 800
F2 P1 300
F2 P2 400 F1 P4 200 P3 600
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
112
F4 P5 400 F1 P6 100
Condizione di selezione sui gruppi (n.1)
Trovare la quantità totale di pezzi forniti per i prodotti per cui sono
forniti in totale almeno 600 pezzi
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
F1 P3 400 F1 P2 200
F1 P4 200 F2 P2 400
CodP
F1 P5 100 F3 P2 200
P1 600
F1 P6 100 F1 P3 400
F4 P3 200 P2 800
F2 P1 300
F2 P2 400 F1 P4 200 P3 600
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
113
F4 P5 400 F1 P6 100
Condizione di selezione sui gruppi (n.1)
Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti
in totale almeno 600 pezzi
FP FP
CodF CodP Qta CodF CodP Qta
F1 P1 300 F1 P1 300
F1 P2 200 F2 P1 300
F1 P3 400 F1 P2 200
F1 P4 200 F2 P2 400 R
CodP
F1 P5 100 F3 P2 200
P1 600
F1 P6 100 F1 P3 400
F4 P3 200 P2 800
F2 P1 300
F2 P2 400 F1 P4 200 P3 600
F3 P2 200 F4 P4 300
F4 P3 200 F1 P5 100
F4 P4 300 F4 P5 400
114
F4 P5 400 F1 P6 100
Condizione di selezione sui gruppi 1
Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti
in totale almeno 600 pezzi
SELECT CodP, SUM(Qta)
FROM FP
GROUP BY CodP
HAVING SUM(Qta)>=600;
115
Condizione di selezione sui gruppi 2
Trovare il codice dei prodotti rossi forniti da più di un fornitore
FP
CodF CodP Qta
P F1 P1 300
CodP NomeP Colore Taglia Magazzino F1 P2 200
P1 Maglia Rosso 40 Torino F1 P3 400
P2 Jeans Verde 48 Milano F1 P4 200
P3 Camicia Blu 48 Roma F1 P5 100
P4 Camicia Blu 44 Torino F1 P6 100
P5 Gonna Blu 40 Milano F2 P1 300
P6 Bermuda Rosso 42 Torino F2 P2 400
F3 P2 200
F4 P3 200
F4 P4 300
F4 P5 400
103
Condizione di selezione sui gruppi 2
SELECT FP.CodP
FROM FP, P
WHERE FP.CodP=P.CodP AND Colore='Rosso'
GROUP BY FP.CodP
HAVING COUNT(*)>1;
117
Condizione di selezione sui gruppi 2
Trovare il codice dei prodotti rossi forniti da più di un fornitore
R
CodP
P1
118
Struttura dell’istruzione SELECT
119